码迷,mamicode.com
首页 > 编程语言 > 详细

Java千百问_06数据结构(022)_String在内存中如何存放

时间:2016-05-24 10:28:19      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

点击进入_更多_Java千百问

1、String在内存中如何存放

了解String是什么看这里:String是什么
String是一个特殊的包装类数据。
可以用两种的形式来创建:

String str = new String( "abc" );
String str = "abc" ;

了解java如何管理内存看这里:jvm是如何管理内存的
了解java堆和栈的区别看这里:java堆和栈有什么区别

第一种是用new()来新建对象的,它会在存放于中,每调用一次就会创建一个新的对象。
第二种是先在中创建一个对String类的对象引用变量str,然后查找堆内String池中有没有存放”abc”,如果没有,则将”abc”存放进String池,并令str指 向”abc”,如果已经有”abc” 则直接令str指向”abc”。

2、String的equals方法如何使用

比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==(可以理解为比较逻辑地址,实际是比较对象号),下面用例子说明上面的理论。

String str1 = "abc" ;
String str2 = "abc" ;
System.out.println(str1==str2); //true

可以看出str1和str2是指向同一个对象的。

String str1 = new String ( "abc" );
String str2 = new String ( "abc" );
System.out.println(str1==str2); // false
  • 对于第二种方式(String str1 =”abc”)创建多个”abc”字符串,在内存中其实只存在一个对象而已。这种方式节省内存空间,同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据String池中数据的实际情况来决定是否有必要创建新对象。

  • 而对于第一种方式,String str = new String(“abc”),则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担

另一个要注意的地方:我们在使用诸如String str = “abc”;的格式定义类时,总是想当然地认为,创建了String类的对象str。这里担心陷阱:对象可能并没有被创建!而可能只是指向一个先前已经创建的对象。只有通过new()方法才能保证每次都创建一个新的对象。

由于String类的immutable(不可变)性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer/StringBuilder类,以提高程序效率。

StringBuffer/StringBuilder的区别看这里:StringBuffer/StringBuilder有什么区别

Java千百问_06数据结构(022)_String在内存中如何存放

标签:

原文地址:http://blog.csdn.net/ooppookid/article/details/51487797

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!