今日在逛csdn时,发现一个问题,String str1="123"和String str2=呢哇String("123")的区别;
我就知道一点,他们的地址不同,至于为何不同,我没研究过,于是我就查了不少资料,发现了他们的创建顺序:
一:当String str1="123"时,回去常量池中查找,是否有"123",有则栈调用,无则创建栈再调用。
二:当String str2 =new String("123")时,也会去常量池查找是否有"123",唯一不同的是它会再堆中创建一个对象,存放常量池"123"的引用,然后栈再引用堆中的String对象!!!!!
也就是这样:
这就又衍生除了,==和equals的区别
==就是在栈中对比地址,经过上面的方法,所以这两个字符串的地址不同
equals是对比对象的内容。
栈中存放的是:基本数据类型、引用地址
当基本数据类型为全局变量时,就存放在堆中
为静态时,存放在方法区中
堆:存放对象
方法区:存放类加载的数据,静态修饰的都在这里