public class Equivalence{
public static void main(String[] args){
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println(n1);
System.out.println(n2);
System.out.println(n1==n2);
}
}
运行结果:
47
47
false既然运行结果n1=47,n2=47,为什么System.out.println(n1==n2)结果是false?
变量n1、n2放置的到底是47的地址还是47本身的值呢?看了很多书上写对象引用变量存储的是对象地址,不能直接访问对象。真是感到迷茫了?谢谢能帮我解答一下
public static void main(String[] args){
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println(n1);
System.out.println(n2);
System.out.println(n1==n2);
}
}
运行结果:
47
47
false既然运行结果n1=47,n2=47,为什么System.out.println(n1==n2)结果是false?
变量n1、n2放置的到底是47的地址还是47本身的值呢?看了很多书上写对象引用变量存储的是对象地址,不能直接访问对象。真是感到迷茫了?谢谢能帮我解答一下
不过并不是所有的对象都有equals方法.有些对象要你自己去实现这个方法..
System.out.println(n1);//相当于System.out.println(n1.toString());
System.out.println(n2);//System.out.println(n2.toString());
System.out.println(n1==n2);//这里是比较两个对象
所以为false
好好看一下java基础。
你问为什么输出的是47。很简单,因为你用了System.out.println(n1)语句~这个语句是引用的java.lang.System类中的OUT属性的println方法~你可以查一下这个方法~它其实用的是toString(int)语句,这个语句就是输出内容而不是地址~
因为前后你是使用了new来创建两个Integer对象(值都是47),但是他们实际是不同的两个对象,就是说他们的地址根本不同。==对对象比较时是比较地址的。如果你想比较Integer对象的值是否相等你应该使用equals代替==。
打印的字符是Integer包装类的toString()方法返回的字符串。
你可以去看看它得实现方式。凡是在System.out.println里传对象打印得都是这个对象所属类的toString方法返回的字符串
第二 System.out.print(n1)=System.out.print(n1.tostring());