题目代码化:
package StringTest
;
public class Test {
public static void main(String
[] args
) {
System
.out
.println("test"=="test");
System
.out
.println("test"="test");
System
.out
.println("test".equals(new String("test")));
System
.out
.println("test"==(new String("test")));
}
}
答案:AC 分析:
A: ==比较的两边的地址值,“test”在字符串常量池中时同一个对象,所以trueB:乍一看是一个恒等式,返回true也没错,但是要注意一点的是,赋值语句=左边必须是变量,如果是常量编译器会报错,如图:,但如果左边是变量之后就只是一个字符串表达式了,而不是boolean类型,所以也不存在返回true和false的问题了。 C:equals方法比较的是两个字符串的内容,所以true。D: ==右边在堆中new出来了一个新的对象,对象保存的是字符串常量池中test的地址,而此表达式本质是 字符串常量池中test的地址 == 堆中字符串对象的地址,所以false。