关于java中的String对象的问题

为什么下面的程序打印false?
书上说java在内容相同的String对象 会使用同一个实例
那为什么引用不相等?

public class test {
    public static void main(String[] args) {
        String s1="123";
        String s2=s1;
        String s3=new String("123");
        System.out.println(s3==s2);
        
    }

}
PIPIONE
浏览 541回答 6
6回答

慕少森

s3是new 的,会产生对象,s3指向的是一个NEW的引用对象地址

一只萌萌小番薯

明确一点,只要new关键字,就是新建一个对象, 内容相同的String对象 会使用同一个实例 这句话可以理解为这种情况下同一引用(如下代码),这使用了常量池技术,将字面值量提前准备好,然后当时用字面量赋值时,直接进行使用。 String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); // true

忽然笑

先说为什么应用不等。String s1 = "123";// 是开辟内存,创建了新的对象,假设存放在内存中的a区域,变量s是对a内存的引用String s2 = s1; // s2的引用也指向a内存String s3 = new String("123");// 重新申请一段内存,假设存放在b区域s3==s2 是判断两个变量是否指向同一块内存。很显然不是,所以打印false “书上说java在内容相同的String对象 会使用同一个实例”是在String s1 = "123";String s2 = "123";的情况,s2和s1才指向相同的内存区域。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java