涉及到java对于栈与堆的应用
String s1="abc";在栈内存中开辟一个值为‘abc’的空间,将引用赋值给s1
String s2=new String("abc");凡是new关键字创建的实例,肯定会被放到堆内存中,所以地址与s2!=s1
String s3="abc";没有通过new关键字声明,首先会在栈内存总寻找是否有值‘abc’,找到了为s1开辟的内存地址,并将地址赋值给s3.所以s1==s3
String类是不可变类,之所以可以被更改值,其实是新创建了新的值,并将新值的地址赋回
SringBuffer则是可变类,在堆内存中开辟空间,可以任意修改值而引用不变,比较两者不同可以更快掌握。 |