String x = "abc"; String a = new String("abc"); System.out.println(x == a);
时间: 2024-02-12 17:43:21 浏览: 29
这段代码会输出 false。
这是因为 `x` 和 `a` 是两个不同的对象,虽然它们的值相同。在 Java 中,使用 `new` 关键字创建的字符串对象,不管它们的内容是否相同,都会被视为不同的对象。而直接使用字符串字面量创建的字符串对象,则会被 Java 编译器优化为同一个对象,因此比较它们的地址时会返回 `true`。所以,如果想比较字符串的值是否相等,应该使用 `equals` 方法,而不是 `==` 运算符。例如,`x.equals(a)` 会返回 `true`。
相关问题
String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); String s3 = "abc" + s1 + "def"; String s4 = "abcabcdef"; System.out.println(s3 == s4); String s5 = s3.intern(); System.out.println(s4 == s5);
s1和s2的结果是true,因为它们都指向字符串常量池中的同一个字符串对象"abc"。
s3和s4的结果是false,因为s是通过字符串拼接生成的新的字符串对象,在堆内存中分配。而s4是直接指向字符串常量池中的对象"abcabcdef"。
s5的结果是true,因为调用s3.intern()方法后,会在字符串常量池中查找是否存在"abcabcdef"这个字符串对象。由于之前已经创建过,所以s5会指向它。所以s4和s5都指向了同一个字符串对象。
String s1 = "abc"; String s2 = new String("abc"); System.out.println(s1==s2); String s3 = "你好吗"; String s4 ="你"; String s5 ="好吗"; System.out.println(s3==(s4+s5))
s1 == s2 的结果是 false,因为 s1 是字符串常量池中的字符串,s2 是在堆中新创建的字符串对象,它们的引用地址不同。
s3 == (s4+s5) 的结果也是 false,因为 s4+s5 会创建一个新的字符串对象,而不是从字符串常量池中获取。