但是,string和其他对象相比,jdk做了很多特殊的处理。体现在如下几个方面:
string可以通过new构造对象,也可以直接赋值。例如:
第一种用new()来新建对象,它会在存放于堆中,每调用一次就会创建一个新的对象。
第二种是先在栈中创建一个对string类的对象引用变量str,然后查找栈中有没有存放”abc”,如果没有,则将”abc”存放进栈,并令str指 向”abc”,如果已经有”abc” 则直接令str指向”abc”。
了解java内存堆栈看这里:
第二种方式(string str1 =”abc”)创建多个”abc”字符串,在内存中其实只存在一个对象而已。这种方式节省内存空间,同时它可以在一定程度上提高程序的运行速度,因为jvm会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
而对于string str = new string(“abc”)的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
比较类里面的数值是否相等时,用equals()方法;当比较两个引用变量是否指向同一个对象时,用==(可以理解为比较逻辑地址,实际是比较对象号)。 例如:
运行结果:
true
可以看出str1和str2是栈中对象。
false
了解string更多看这里:
原文地址:http://blog.csdn.net/ooppookid/article/details/51335389