String是一个特殊的包装类数据。可以用下面两种方式创建:
String str = new String("abc");
String str = "abc";
第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈(常量池)中有没有存放"abc",如果没有,则将"abc"存放进栈(常量池),并令str指向”abc”,如
果已经有”abc” 则直接令str指向“abc”。
比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一个对象的。
在eclipse中的调试视图中可以看到abc的id是同一个。实际上java对常量池中进行了优化。同样的内容只保留一份。用这种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
以上是引用我原来一个帖子里的,希望对你有帮助 |