java学习笔记 String对象的两种创建方式
来源:互联网 发布:2017nba总决赛球员数据 编辑:程序博客网 时间:2024/05/16 00:27
原文:http://1023mmmm.blog.163.com/blog/static/3884022520121022149911/
1.String str1 = “abc”;
2. String str2 = new String("abc");
采用第一种方式创建字符串会去查找String Pool是否存在abc,如果有就直接将str1引用到String Pool中abc 的地址,没有则先在Stirng Pool中创建一个然后再将地址赋给str1.
采用第二种方式创建字符串则会直接在堆中创建对象abc,将该对象的地址赋给str2,每次调用 String str2 = new String("abc"); 时都会创建一个新的对象。
对于类似:String s1 = new String("111");
String s2 = "sss111";
String s3 = "sss" + "111";
String s4 = "sss" + s1;
对于s2,s3,s4是创建在String Pool 还是在堆中取决于该字符串是在编译期就已经确定还是在运行期确定的。S2,S3在编译期就确定,创建在String Pool中,s4是在运行期确定的,则是创建在堆中。
对于第一种方式创建的字符串,可能每次创建的不是新的,而是前一次创建的在String Pool中的字符串,而频繁使用第二种创建方式则会在堆中产生大量的对象。
String.intern()
String类维护一个初始为空的字符串的对象池,当intern方法被调用时,如果对象池中已经包含这一个相等的字符串对象则返回对象池中的实例,否则添加字符串到对象池并返回该字符串的引用。
从程序的角度上怎么来看这个方法呢,我们假设有两个字符串s1,s2,当s1.equals(s2)时,s1.intern()==s2.intern(),也就是说这两个字符串在内存中使用的是同一个实例。如果当s1.equals(s2)时,s1.intern()!=s2.intern(),那么有可能在s1,s2是通过new的方式创建的或者其中一个是通过new的方式创建的。
- java学习笔记 String对象的两种创建方式
- Java中String类的两种创建方式
- 两种创建String对象的区别
- JVM学习笔记之对象访问的两种方式
- java中创建String类型对象的两种方式以及在使用equals()和“==”两种方法时的区别
- 创建XMLHttpRequest对象的两种方式
- Javascript创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- javascript创建对象的两种方式
- c++创建对象的两种方式
- 创建XMLHttpRequest对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- Java关键字(基础学习用到)
- 了解自己的路线
- Netty5中的4种解码器
- C++ Primer 5e chapter 13.2
- php 分页操作(三)
- java学习笔记 String对象的两种创建方式
- 组件与组件的桥梁----意图Intent
- Linux命令的返回值
- Failed to sync Gradle project '项目名称(module)' Error:failed to find Build Tools revision 20.0.0
- hue安装与部署
- LeetCode[91]::Decode Ways C++
- 解决Android Studio中调试总出现waiting for adb问题
- java垃圾回收精华
- Linux Shell编程Tips