也许我在 Java 上工作太久了,却没有真正理解它的一些基础知识。
我确实明白==
用于对象引用相等并且.equals()
是为了对象值相等。
-
比较Integers
:
Integer x = 1, y = 1;
System.out.println(x == y); // true
为什么?由于使用了对象引用相等性,因此它应该为 false,因为它们都是不同的对象。
-
比较getClass()
返回值:
String s1 = "a", s2 = "b";
System.out.println(s1.getClass() == s2.getClass()); // true
为什么?再次如上所述,使用对象引用。两者都使用getClass
将返回单独的 Class 对象。
我是否错过了什么,或者我的心是否已经厌倦了用 Java 编码?
整数对象
Integer x = 1, y = 1;
System.out.println(x==y); // true, why?
发生这种情况是因为对于byte
范围(-128到+127),java使用缓存的Integer对象,存储在Integer http://download.oracle.com/javase/6/docs/api/java/lang/Integer.html的内部类,整数缓存 http://www.docjar.org/docs/api/java/lang/Integer%24IntegerCache.html。每次创建一个值为 -128 到 +127 之间的 Integer 对象时,同一个物体将被返回(而不是创建new目的)。
相反,对于值outside the byte
范围内,比较为false
:
Integer x = 999, y = 999;
System.out.println(x==y); // false
类对象
String s1 = "a", s2 = "b";
System.out.println(s1.getClass() == s2.getClass()); // true. Why?
这是真的,因为class两个对象的String
,并且每个 JVM 的每个类对象只有一个副本(就像单例)。这类对象从返回getClass()
每个字符串的the same类对象(String.class
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)