猿问

下面这图里,最后一段话,看不懂啊,大神打点代码演示看看啊

java的八种基本类型(Byte 
Short、Integer、Long、Character、Boolean、Float、Double),除Float及Double意外,其它六种都实现了常量池,
但是他们只在大于等于-128且小于等于127时才能使用常量池,如果不在此范围内,则会new一个出来,保存在堆内存中。
fenkapian
浏览 1227回答 1
1回答

frece

常量池你可以理解成 一块内存空间,说明一个知识点, == 这个运算符号,如果a == b 是true的话,说明 a和b指向的同一个对象,两个对象不相等的话他们运行 == 运行结果一定是false(注意是对象不相等不是值不相等)下面 上代码:public class Test { public static void main(String[] args) { Integer i1 = 1; Integer i2 = 1; //i2在-128~127 直间,等价于 i2 = i1 System.out.println(i1 == i2); /**  * 输出结果 true  */ Integer i3 = 128; // i3 不在-128~127 直间,等价于 i3 = new Integer(128); Integer i4 = 128;//  i4 不在-128~127 直间,等价于 i4 = new Integer(128); System.out.println(i3 == i4); /**  * 输出结果 false  */ } }就拿Integer举例说吧,上边代码 Integer i1 = 1; 当i1创建出来的时候编译器发现他在-128~127这个范围里,所以会把它暂存在一块固定的内存中,当你再定义 Integer i2 = 1的时候,编译器会去常量池中找看看你之前有没有定义过值为1的Integer对象,如果找到了就直接拿来用,没有才会创建新的,所以 这里 i1 和i2指向了同一个对象,故System.out.println(i1 == i2); 为true, 如果你在后边再创建i5, i6,i7,i8。。。创建多少个,它都指向这一个对象,他们进行==运算结果都是true当你定义i3 = 128时,编译器发现他不在-128~127这个范围内,因此就会直接new一个新的Integer对象出来,同理定义i4 = 128时也一样,所以 i3 == i4运算结果为false这样做的目的是节省空间提高程序运行效率题外话:如果想比较值的话 用 i3.intValue() == i4.intValue() 这样结果是true
随时随地看视频慕课网APP

相关分类

Java
我要回答