您当前的位置:首页 > 生活百科 > 职场

一道简单面试题引出的Java数据类型连环问

时间:2020-07-16 11:37:28  来源:  作者:

题目如下:

public static void main(String[] args) {
		Integer i1 = 100;
		Integer i2 = 100;
		Integer i3 = 150;
		Integer i4 = 150;
		System.out.println(i1 == i2);
		System.out.println(i3 == i4);
}

你想好答案了吗?
答案是:

true
false

为什么不都是true呢?
这就需要我们看看Integer i1 = 100;执行这条语句的时候发生了什么?
当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf,查看jdk源码,valueOf方法内容如下:

/**
 * Returns an {@code Integer} instance representing the specified
 * {@code int} value.  If a new {@code Integer} instance is not
 * required, this method should generally be used in preference to
 * the constructor {@link #Integer(int)}, as this method is likely
 * to yield significantly better space and time performance by
 * caching frequently requested values.
 *
 * This method will always cache values in the range -128 to 127,
 * inclusive, and may cache other values outside of this range.
 *
 * @param  i an {@code int} value.
 * @return an {@code Integer} instance representing {@code i}.
 * @since  1.5
 */
public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

从代码和注释上可以看到,这个方法是从jdk1.5之后开始添加的

如果整型字面量的值在-128到127之间,直接引用常量池中的Integer对象,否则new新的Integer对象。所以上面的面试题中i1 == i2的结果是true,而i3 == i4的结果是false。


从这道面试题中我们可以看到基本数据int 转换成了 Integer类型,JAVA中为什么存在这两种类型呢?

我们知道在Java中,new一个对象会存储在堆里,通过栈中的引用来使用这些对象;但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很高效,特别是简单的小的变量。所以就出现了基本类型,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在栈中,因此更加高效。

既然基本类型会将值直接存储到栈中实现高效率,为什么还要有包装类型呢?

我们知道Java是一个面向对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装Object,这时就需要这些基本类型的包装器类了。

到此我们知道了Java中为什么会同时存在基本类型和包装类型了,那两者有什么区别呢?

1、声明方式不同:

基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;

2、存储方式及位置不同:

基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;

3、初始值不同:

基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;

4、使用方式不同:

基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。


说到这里,我们说下Java的基本数据类型和其对应的包装类型有哪些?

一道简单面试题引出的Java数据类型连环问

 

可参看【Java官网数据类型描述】:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

boolean类型的大小我写了个问号,大小不确定。我们看下Java官网中关于boolean类型的描述:

boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its “size” isn’t something that’s precisely defined.

布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义的。也就是说,Java规范中,没有明确指出boolean的大小

那么boolean类型到底占几个字节呢?

有以下三个说法:

1、1个bit

boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即可存储,位是计算机最小的存储单位。

2、1个字节

虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位,实际存储的空间是:用1个字节的最低位存储,其他7位用0填补,如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。

3、4个字节

在《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。也就是说JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节。

如果认同第三条,那么存在一个问题:虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗?

经过查阅资料发现,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),32 位 CPU 使用 4 个字节是最为节省的,哪怕你是1个bit它也是占用 4 个字节。因为 CPU 寻址系统只能 32 位 32 位地寻址,具有高效存取的特点。

It depends on Java virtual machine.这取决于java虚拟机 。

总结:Java规范中,没有明确指出boolean的大小。在《Java虚拟机规范》给出了4个字节,和boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的

一道简单面试题引出的Java数据类型连环问

 



Tags:面试   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
你知道名校毕业生和普通大学毕业生究竟差在哪里吗?现实真的很残酷。在大部分人眼中,985大学生和普通大学生最大的区别就是学校的层次不同,未来的就业机会也不同。但其实,这些只...【详细内容】
2021-12-27  Tags: 面试  点击:(2)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Tags: 面试  点击:(5)  评论:(0)  加入收藏
在个案辅导中,也经常遇到公务员面试前的准备和辅导。首先,我其实挺想吐槽公考的笔试和考试机制的,让我先一吐为快。公务员考察的面非常多,从表达能力这种表面的,到价值观这种底层...【详细内容】
2021-12-14  Tags: 面试  点击:(12)  评论:(0)  加入收藏
公务员面试形式进行了创新,增加了结构化小组面试这一形式,在结构化的基础上增加了考试互评和回应的环节,这一改变增加了考试难度,也给许多考试造成了困惑,那今天就结构化小组的点...【详细内容】
2021-12-14  Tags: 面试  点击:(14)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯&middot;奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  Tags: 面试  点击:(24)  评论:(0)  加入收藏
《极简主义投资》系列课程,告别碎片化认知,每经研究院倾力打造,以最浅显的知识脉络和最实用的交易体系,去改变大家过去“屡战屡败”的投资困境,点击下方图片可得&darr;最近,一条留...【详细内容】
2021-11-15  Tags: 面试  点击:(18)  评论:(0)  加入收藏
这段时间毕竟也是 “金九银十” 的面试的黄金季节,阿粉当然也想去面试,但是因为自身受限,所以只能采访一下出去面试的同学们都问了什么内容,其中有一个,阿粉觉得有必要给大家分享...【详细内容】
2021-11-05  Tags: 面试  点击:(45)  评论:(0)  加入收藏
大家先思考一个问题,这也是在面试过程中经常遇到的问题。如果你们公司现在的产品能够支持10W用户访问,你们老板突然和你说,融到钱了,会大量投放广告,预计在1个月后用户量会达到10...【详细内容】
2021-10-19  Tags: 面试  点击:(47)  评论:(0)  加入收藏
先自我介绍一下:我在事业单位工作了几年,读了个双证MPA。后来也考过几次公务员,有三次公务员面试全场第一经验:1次部委面试第一,1次山东省某市核心部门岗位全场第一、1次河北省某...【详细内容】
2021-10-09  Tags: 面试  点击:(139)  评论:(0)  加入收藏
模型在手,方法我有,文末完整版! ………...【详细内容】
2021-09-17  Tags: 面试  点击:(46)  评论:(0)  加入收藏
▌简易百科推荐
毕业后不重视自己的档案,等到考研、考编、考公务员、单位入职等需要用到档案时,才想起来查询自己的档案。但是,很多人查询档案没有经验,不知道该从何查起。下面给大家介绍查询个...【详细内容】
2021-12-23  帮帮团人力资源    Tags:个人档案   点击:(14)  评论:(0)  加入收藏
评职称可谓是工程人事业发展中的一件大事了,可以说一般想要在行业中持续地、更好地发展的人都会选择评个中级职称! 怎么评广东省建筑中级职称? 在评审时工程业绩最为重要。那...【详细内容】
2021-12-23  资深职称老师—小丽    Tags:职称   点击:(4)  评论:(0)  加入收藏
职场中,事情做得漂亮,不一定结局漂亮;但是善于谋人,把人打通了,出手一般就是巅峰。人情社会尤其如此,说到底工作是人定的,好不好也是人说的,有人为你说话,你就是能力强。没人看到你,工...【详细内容】
2021-12-22  胖子说职场经验    Tags:职场   点击:(4)  评论:(0)  加入收藏
一、在国企,能改变命运的只有你自己。你想改变,就总有办法。你认命,就不要埋怨命运不公。多少领导一样是从基层爬上去的。也许你会说,他们背后有人。我也不反对,但总有那么20%左...【详细内容】
2021-12-21  职场真谛    Tags:国企   点击:(6)  评论:(0)  加入收藏
又到年底了,有更好的工作选择?想跳槽?社保咋处理?以及社保需要注意的小问题是什么?一文全理清!一、打工人离职手册之社保全指南 二、需要注意的社保小问题 ...【详细内容】
2021-12-17  恒企会计网校    Tags:离职指南   点击:(6)  评论:(0)  加入收藏
在个案辅导中,也经常遇到公务员面试前的准备和辅导。首先,我其实挺想吐槽公考的笔试和考试机制的,让我先一吐为快。公务员考察的面非常多,从表达能力这种表面的,到价值观这种底层...【详细内容】
2021-12-14  为好优姐姐    Tags:公务员面试   点击:(12)  评论:(0)  加入收藏
公务员面试形式进行了创新,增加了结构化小组面试这一形式,在结构化的基础上增加了考试互评和回应的环节,这一改变增加了考试难度,也给许多考试造成了困惑,那今天就结构化小组的点...【详细内容】
2021-12-14  红河华图教育    Tags:公务员面试   点击:(14)  评论:(0)  加入收藏
在各级党政机构之中,我们经常会听到一个称呼&mdash;&mdash;“常务副职”,例如县政府有常务副县长,组织部有常务副部长等等。其实,常务副职只是一个约定俗成的简称,其准确名称叫做...【详细内容】
2021-12-14  瑛杰小猪  今日头条  Tags:常务副职   点击:(20)  评论:(0)  加入收藏
在职场,什么都可以没有,就是不能没有情商。没有情商的人,在职场注定难成大器。人际关系搞不定,说话口无遮拦,为人处世更是不够圆滑,处处受限,处处是破绽。尤其是和领导相处,连对方的...【详细内容】
2021-12-14  第一桶金学派    Tags:领导   点击:(8)  评论:(0)  加入收藏
在职场,除了个人的工作能力以外,还要学会去不断的积累自己的人际关系。因为有了关系,就有了渠道,有了机会,有了方法,有了财富&hellip;&hellip;越是和厉害的人交往,你自己也会变得越...【详细内容】
2021-12-10  第一桶金学派    Tags:职场   点击:(12)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条