字符串的内容是放在方法区中的常量池中的。 所以,直接定义初始化和通过构造方法初始化字符串,使得两者对象所指的内容是不一样的。 比如如下代码: ---通用代码忽略-- String s1=new String(“hello”); String s2=”hello”; String s3=”hello”; System.out.println(“s1==s2:”+(s1==s2); System.out.println(“s1==s3:”+(s1==s3); System.out.println(“s2==s3:”+(s2==s3); 打印结果: s1==s2:false s1==s3:false s2==s3:true 其中:s1指向的是堆中对象的地址,而s2和s3指向的是方法区常量池中“hello”的地址 具体内存地址数据大概指向图如下:
|