首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java 中数值变量赋值有关问题

2013-11-16 
Java 中数值变量赋值问题//在-128~127 之外的数 Integer i1 200 Integer i2 200 System.out.println

Java 中数值变量赋值问题
//在-128~127 之外的数 Integer i1 = 200; Integer i2 = 200; System.out.println("i1==i2: "+(i1==i2));//false // 在-128~127 之内的数 Integer i3 = 100; Integer i4 = 100; System.out.println("i3==i4: "+(i3==i4));//true Long l1 = 9L;//内存机制 Long l2 = 9L; //实际上内存中l1只是一个long类型的变量,它存在于向stack(栈)中,数值并不在其中存放, //它指向heap(堆)中另一块真正存放数值的内存,加L的目的就是为了让heap中也创建一块long类型所需要的内存,用来来放数值。 //所以说=前后两者其实是在不同的两块内存,只不过有个无形的指针将两者连接起来了。 System.out.println("l1 == l2: " + (l1 == l2));//true //原因:http://www.2cto.com/kf/201305/215619.html Long t1 = new Long ("9"); Long t2 = new Long ("9"); //2个对象开辟的内存空间不同 System.out.println("t1 == t2: " + (t1 == t2));//false

?

?

结果:

i1==i2: false
i3==i4: true
l1 == l2: true
t1 == t2: false

?

看来Java 中的自动装箱/拆箱以及包装类变量赋值还是有些讲究的。

?

?i1, i2 不相等, i3,i4 相等的问题:

参考: http://www.cnblogs.com/shenliang123/archive/2012/04/16/2451996.html

为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象

而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;?t1 和 t2 分别创建了2个不同的内存对象, 其内存地址不同.

热点排行