Integer a= 127 与 Integer b = 127
来源:互联网 发布:何洁的长相 知乎 编辑:程序博客网 时间:2024/05/21 06:34
引入
面试的时候,考官问了我一个问题 问题描述如下:
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
a == b 与 c == d 的比较结果是什么?
a == b 的结果为true 而 c == d的结果为false;
为什么会出现结果?回去百度之后发现问题的根源所在,在解决这个问题之前,先说说常量池的概念,百度百科上有
我在复述一遍。
Java常量池
常量池在java中用于保存编译期已经确定的,它包括了关于类,方法,接口中的常量,也包括字符串常量。例如
String s = "Java" 这种声明的方式。产生的这种"常量"就会被放到常量池,常量池是JVM的一块特殊的内存空间。
使用Java常量池技术,是为了方便快捷地创建某些对象,当你需要一个对象时候,就去这个池子里面找,找不到就在池子里面创建一个。但是必须注意如果对象是用new 创建的。那么不管是什么对像,它是不会放到池子里的,而是向堆申请新的空间存储。
java中基本类型的包装类的大部分都实现了常量池技术,这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池。超过了就要申请空间创建对象了
”==“ 我们知道比较的是引用的地址(其实java不要允许用户直接对内存进行操作的的)。
当我们使用Integer a = 127 的时候 实际上调用的是下面这个方法:
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); }
如果 数在 -128到127之间 就返回池子中的对象。没有的话就创建
如果超过范围,看到没有return new Integer(i) 就是要在堆上重新申请一段了。
其实如果问题是这样的话
Integer a = new Integer(127);
Integer b = new Integer(127);
Integer c = 128;
Integer d = 128;
a == b 一定为false 因为 没有去找常量池,a,b都是在堆中申请了空间 返回的引用肯定不一样。因此为
0 0
- Integer a= 127 与 Integer b = 127
- Integer (a=127,b=127; a!=b?)
- Integer a = 128, Integer b = 128, a==b ; Integer c = 1 , integer d =1 , c==d
- Integer类对象池与==问题:Integer a=34556,b=34556;但a==b为false
- Convert Integer A to Integer B
- Integer与==
- Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式结果差异分析
- Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式结果差异分析
- Integer的127与128
- Q5.5 convert integer A to integer B
- Integer.parseInt("a")方法和Integer.valueOf("a")、Integer.valueOf(a,b)方法的分析
- 【java】Integer == Integer?
- 【java】Integer == Integer?
- ECNU-ACM-Problem A+B(Big Integer)
- A * B Problem (Big integer version) 【高精度】
- A * B Problem (Big integer version) 【高精度】
- A + B Problem (Big integer version) 【高精度】
- Problem A+B(Big Integer)大数相加
- <四>初识Bash
- VS2013 MFC添加位图
- hdu 4287 Intelligent IME
- Android基础教程之-----控件
- Ubuntu下sublime-text无法输入中文解决方案
- Integer a= 127 与 Integer b = 127
- WooCommerce API Keys的生成和保存机制
- ARM设置模式为管理模式
- 【时间管理】群星总比月亮闪烁
- [LeetCode(Q69)] Sqrt(x) (编程实现sqrt)
- HDU 2103 Family planning(水~)
- 强连通之HDU4635 Strongly connected
- ZOJ-3827-Information Entropy
- Java并发编程(一)线程定义、状态和属性