黑马程序员技术交流社区
标题:
帮忙分析一下这个函数的结果?
[打印本页]
作者:
周洋
时间:
2012-3-30 15:15
标题:
帮忙分析一下这个函数的结果?
谁能帮忙分析一下这个函数的结果?代码如下
package execisetest;
public class Zhuangxiang {
public static void main(String [] args){
Integer num3=12;
Integer num4=12;
Integer num5=129;
Integer num6=129;
int num7=129;
int num8=129;
System.out.println(num3==num4);
System.out.println(num5==num6);
System.out.println(num7==num8);
}
}
输出结果是
true
false
true
为什么第二个输出结果是false?
作者:
肖发腾
时间:
2012-3-30 15:57
{:soso_e100:}这个结果不难理解。楼主注意:
整数的自动装箱拆箱的具体过程中,整数在-128到127范围内的时候,java虚拟机不会再为封装成对象的整数进行独自分配地址,
即多个对象在内存中指向的是同一个地址。这样做有利于内存的节省,因为这些范围内的数字会经常出现。而超过这个范围后就会
为它们单独分配地址了,题中129>127,所以它们不相等。楼主明白了吧。希望加技术分啊,老师{:soso_e100:}要进黑八,一切顺利,就差技术分了
作者:
贠(yun)靖
时间:
2012-3-30 16:10
数字大于byt的范围了 就得重新开辟空间存放数字 小于的话 不重新开辟空间
作者:
王运科
时间:
2012-3-30 16:16
在java中,数据类型总共可分为两大种,基本数据类型(值类型)和类类型(引用数据类型)。基本类型的数据不是对象,不能作为对象调用其toString()、hashCode()、getClass()、equals()等等方法。
所以在java中,针对8种基本数据类型,提供了针对每个基本数据类型的包装类。如下:
INDEX 基本数据类型 包装类
1 int Integer
2 char Character
3 float Float
4 double Double
5 byte Byte
6 short Short
7 long Long
8 boolean Boolean
所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如你的例子中把int型包装成Integer类的对象。
所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。
在Java中对于从-128到127之间的数,因为数据比较小,而且使用的比较频繁,他们被装箱为Integer对象后,会在内存中被重用,超过这个值时每次装箱会产生新的对象。因为129超过了被装箱的范围值,所以会产生两个新的对象,既然是两个,所以返回false.
作者:
izwj
时间:
2012-3-30 16:17
本帖最后由 izwj 于 2012-3-30 16:18 编辑
整数在-128到127范围时,java虚拟机不会再为封装成对象的整数进行地址分配,
对象在内存中指向的是同一个地址,“==”的结果就为true;
超过这个范围为它们单独分配地址,129>127,所以“==”的结果就为true;即地址不同
作者:
翟友伟
时间:
2012-3-30 16:21
-128——127 之内视为 同一个
超过会封装多出个箱子。。
毕老 和张孝详 视频中都提到了。
作者:
邵中国
时间:
2012-3-30 16:23
{:soso_e101:}楼上
作者:
newlaw2013
时间:
2012-3-30 17:51
整数类型:int short long byte
程序中对num3、num4、num5、num6的操作都涉及到了整数装箱成为Interger对象。
对于整数类型装箱成为Integer对象的时候,如果数字在一个字节之内(-128~127),
会先缓存起来,缓存成一个对象。如果数字相同时就直接用这个对象,所以12的时候,
是同一个对象,运算返回true。而两次的129赋值,创建了新对象,=运算就返回false。
作者:
胡川
时间:
2012-3-30 18:06
整数在-128到127范围,
而129>127,所以“==”的结果就为false;即地址不同
懂了吧
作者:
李井山
时间:
2012-3-30 18:48
享元模式:
-128到127中的数字由于太常被用到,所以在内存中有个池,这些对象常驻内存。需要的时候直接指向他,避免多次创建的内存消耗。
129过了,内存池中没有这个对象,创建了2个对象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2