String s1="abc";
String s3=new string("abc");
s1和s3的区别:s1是不是直接引用了在常量池里“abc”所在的内存地址,而s3是先开辟了一块内存区域,然后把abc的值数据放在了这一块的内存位置上?
不知道是不是我这样理解,印象里教程视频里是这样讲的,晚点系统地看一遍书,看看书里是怎么说的
String s1="abc";
String s3=new string("abc");
s1和s3的区别:s1是不是直接引用了在常量池里“abc”所在的内存地址,而s3是先开辟了一块内存区域,然后把abc的值数据放在了这一块的内存位置上?
不知道是不是我这样理解,印象里教程视频里是这样讲的,晚点系统地看一遍书,看看书里是怎么说的
这里是关于JVM的相关知识
因为String在Java源码中是一个被final修饰的类:
所以每次操作都会生成新的String对象,然后将指针指向新的String对象。
//相当于在堆内存的常量池中 新开辟了 一块地址内存空间 内存空间存放的数据是“abc”
//而 s1是存在于栈内存中的
// 此时栈内存中的s1 指向 了 堆内存空间中的常量池数据也就是 “abc”
String s1 = "abc";
//而当楼主 new String("abc")时 ,也是重新开辟了一块内存地址 将数据放到里面 s3 的指针 指向 新开辟的内存地址
String s3 = new String("abc");
System.out.println(s1 == s3); //false