public class Demo { public static void main(String argv[]) { String s1 = new String("1"); s1.intern(); String s2 = "1"; System.out.println(s1 == s2); String s3 = new String("1") + new String("1"); s3.intern(); String s4 = "11"; System.out.println(s3 == s4); } }
时间: 2024-02-12 12:24:22 浏览: 59
浅析C#中的Main(String[] args)参数输入问题
在这段代码中,s1和s2是不同的对象,因此s1 == s2的结果是false。这是因为在Java中,使用new关键字创建的字符串对象是存储在堆内存中的,而使用双引号创建的字符串常量是存储在常量池中的。s1.intern()方法将s1字符串对象尝试放入常量池中,但由于常量池中已经存在值为"1"的字符串常量,所以s1实际上并没有放入常量池中。
而对于s3和s4,由于使用了字符串拼接操作,s3实际上是在堆内存中创建的一个新的字符串对象。然后调用s3.intern()方法,将s3尝试放入常量池中。由于常量池中不存在值为"11"的字符串常量,所以s3成功放入了常量池中。因此,s3 == s4的结果是true。
阅读全文