java Integer和int之间==的比较问题。求解释

[复制链接]
查看11 | 回复3 | 2017-11-24 15:34:35 | 显示全部楼层 |阅读模式
public static void main(String[] args) {
                // TODO Auto-generated method stub
                Integer a = new Integer(1);
                Integer b = new Integer(1);
                int c=1;
                Integer e = 1;
                System.out.println("a==b:"+(a==b));
                System.out.println("a==c:"+(a==c));
                System.out.println("a==e:"+(a==e));
                System.out.println("c==e:"+(c==e));
        }
结果:
a==b:false
a==c:true
a==e:false
c==e:true

回复

使用道具 举报

千问 | 2017-11-24 15:34:35 | 显示全部楼层
Integer是int的封装对象,两个对象==比较的是栈的值Integer a = new Integer(1);Integer b = new Integer(1);a与b存的是Integer的堆中的地址,而不是值a、b指向堆中的地址显然不同所以 a==b 为falseint c = 1; int为值类型,引用类型Integer与值类型int比较显然比较的是值因为int在堆中是不开辟内存的,他在栈中的值则为他本身的值所以a==c比较的是他们各自的value, a==c为trueInteger e=1; 这个比较特殊,直接赋值它有独立的内存,每次赋值时将检查内存中是否有值跟他匹配的,若有则把此内存地址付给e,...
回复

使用道具 举报

千问 | 2017-11-24 15:34:35 | 显示全部楼层
java Integer和int之间==的比较问题。求解释public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a = new Integer(1);
Integer b = new Integer(1);<b...
回复

使用道具 举报

千问 | 2017-11-24 15:34:35 | 显示全部楼层
JDK1.5以后的自动拆装箱引起的,对象和对象比较(Integer)是引用比较堆内存地址,所以不相等,对象和基本数据类型会自动转成基本类型后比较,即比较栈中地址,所以是相等的...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行