也许我在Java上工作太久而没有真正理解它的一些基础知识.
我明白这==是对象引用相等,.equals()是对象值相等.
比较Integers:
Integer x = 1, y = 1;
System.out.println(x == y); // true
Run Code Online (Sandbox Code Playgroud)
为什么?由于使用了对象引用相等,因此它们应该是假的,因为它们都是不同的对象.
比较getClass()返回值:
String s1 = "a", s2 = "b";
System.out.println(s1.getClass() == s2.getClass()); // true
Run Code Online (Sandbox Code Playgroud)
为什么?再次如上所述,使用对象引用.两者都getClass将返回单独的Class对象.
我是否遗漏了某些东西,或者我的思绪是否厌倦了Java编码?
Boh*_*ian 12
Integer x = 1, y = 1;
System.out.println(x==y); // true, why?
Run Code Online (Sandbox Code Playgroud)
这是因为对于byte范围内的值(-128到+127),java使用缓存的Integer对象,存储在Integer的内部类IntegerCache中.每次创建一个介于-128和+127之间的Integer对象时,将返回相同的对象(而不是创建新对象).
相反,对于范围之外的byte值,比较是false:
Integer x = 999, y = 999;
System.out.println(x==y); // false
Run Code Online (Sandbox Code Playgroud)
String s1 = "a", s2 = "b";
System.out.println(s1.getClass() == s2.getClass()); // true. Why?
Run Code Online (Sandbox Code Playgroud)
这是真的,因为两个对象的类都是String,并且每个JVM只有一个每个类对象的副本(它就像一个单例).从每个String 返回的类对象getClass()是相同的类对象(String.class).