Java

mac2026-03-26  6

题目代码化:

package StringTest; public class Test { public static void main(String[] args) { System.out.println("test"=="test");//A System.out.println("test"="test");//B System.out.println("test".equals(new String("test")));//C System.out.println("test"==(new String("test")));//D } }

答案:AC 分析:

A: ==比较的两边的地址值,“test”在字符串常量池中时同一个对象,所以trueB:乍一看是一个恒等式,返回true也没错,但是要注意一点的是,赋值语句=左边必须是变量,如果是常量编译器会报错,如图:,但如果左边是变量之后就只是一个字符串表达式了,而不是boolean类型,所以也不存在返回true和false的问题了。 C:equals方法比较的是两个字符串的内容,所以true。D: ==右边在堆中new出来了一个新的对象,对象保存的是字符串常量池中test的地址,而此表达式本质是 字符串常量池中test的地址 == 堆中字符串对象的地址,所以false。
最新回复(0)