A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alax 中级黑马   /  2014-5-19 06:53  /  1616 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer a=new Integer(127);
Integerb=new Integer(127);
System.out.print(a==b);
System.out.print(a.equals(b);
Integer a=127;
Integer b=127;
System.out.print(a==b);
System.out.print(a.equals(b);

3 个回复

倒序浏览
false:两个new 的对象的引用地址不同
true:内容相同。equals比较的是内容。
true:在一个字节之内的整数,应该是就像字符串一样,存在于常量池中,是共享数据。所以,a和b指向了同一个对象地址。
true:内容相同。
回复 使用道具 举报
楼上结果都是对的~

==是判断两个对象的地址值是否相同。
Integer类中的equals()方法是复写了Object中的equals()方法,会判断两个对象的内容是否相同。

Integer a=127; 涉及到自动装箱,但如果这个整数在-127~127之间时,系统不会每次都new一个新的Integer对象,而是取值相同的对象只new一次,所以a和b指向同一个对象,==的结果也就是true了~
回复 使用道具 举报
本帖最后由 波涛 于 2014-5-20 02:04 编辑

Integer a=new Integer(127); //Integer整型包装类,当普通类对待即可,栈中a存放Integer在堆中的地址,指向堆空间开辟的一个区域, 存放了127
Integer b=new Integer(127);//同样栈里的b指向堆内存中新区域也存放一个127
System.out.print(a==b);// “==”是判断内存地址是否相等; a、b指向堆中的地址显然不同所以,故为false
System.out.print(a.equals(b));//equals() 是判断两个对象的值是否相等,而不管它们的内存地址是否相等, 由于其值皆为127,故为true
-------------------------------------------------------------------------

-------------------------------------------------------------------------
所以注意以下形式的比较:



    1. public static void main(String []args) {  
    2.       Integer a = 100;  
    3.       Integer b = 100;  
    4.       System.out.println(a==b);   //true
    5. }
    复制代码
    但是

    1. public static void main(String []args) {  
    2.       Integer a = 200;  
    3.       Integer b = 200;  
    4.       System.out.println(a==b);   //false
    5. }
    复制代码
    如有地方不对,请楼下随时吐槽。   共同学习~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马