创建字符串对象的时候,使用字面值和使用new String()构造器这两种方式有什么不同?
2016-02-16 14:24
399 查看
当我们使用new String构造器来创建字符串的时候,字符串的值会在堆中创建,而不会加入JVM的字符串池中。相反,使用字面值创建的String对象会被放入堆的PermGen段中。例如:
String str=new String(“Test”);
这句代码创建的对象str不会放入字符串池中,我们需要显式调用String.intern()方法来将它放入字符串池中。仅仅当你使用字面值创建字符串时,Java才会自动将它放入字符串池中,比如:String s=”Test”。顺便提一下,这里有个容易被忽视的地方,当我们将参数“Test”传入构造器的时候,这个参数是个字面值,因此它也会在字符串池中保存另外一份。想了解更多关于字面值字符串和字符串对象之间的差别,请看这篇文章。
下图很好地解释了这种差异。
String str=new String(“Test”);
这句代码创建的对象str不会放入字符串池中,我们需要显式调用String.intern()方法来将它放入字符串池中。仅仅当你使用字面值创建字符串时,Java才会自动将它放入字符串池中,比如:String s=”Test”。顺便提一下,这里有个容易被忽视的地方,当我们将参数“Test”传入构造器的时候,这个参数是个字面值,因此它也会在字符串池中保存另外一份。想了解更多关于字面值字符串和字符串对象之间的差别,请看这篇文章。
下图很好地解释了这种差异。
相关文章推荐
- 微信红包随机算法初探
- junit 使用JUnit测试预期异常
- BSOJ3991:聪聪可可 点分治
- IOS开发证书显示“此证书的签发者无效”解决方法
- 爬虫学习 基本打开网页操作
- 解决Develop证书和Distribution的证书签发者无效问题
- MAC下安装与配置MySQL
- 滑动隐藏标题栏布局ListView
- JAVA wait(), notify(),sleep详解
- java的值传递和引用传递
- 自定义导航栏返回按钮
- CPU寻址方式
- 在Java中如何避免死锁?
- 核心层,汇聚层,接入层,交换机性能差别
- python __del__ http://www.cnblogs.com/coder2012/p/4050084.html
- expression="execution(* cn.**.service.*.*(..))"
- 【.Net】鼠标点击控制鼠标活动范围 ClipCursor
- 【Java】hashcode()和equals()
- 关于clientHeight、offsetHeight、scrollHeight
- 哈理工OJ 1431 摞盘子【水题】