Java 不同方式,不同位置创建String字符串的区别
2017-10-21 19:04
423 查看
Java 不同方式,不同位置创建String字符串的区别
最近翻看Java编程思想 第四版,其中一个练习题是:类中初始化的String和构造函数里初始化的区别,针对新建String的不同位置、方式来做如下测试1、不同位置新建String的区别:
public StringTest{ private String str1 = "cai" private String str2; public StringTest(){ str2 = "hua"; } } public class TestString { public static void main(String[] args) { System.out.println("str1 :" + new StringTest().str1); System.out.println("str2 :" + new StringTest().str2); } }
输出结果:
str1:cai
str2:hua
针对以上输出结果,我们可以做出如下描述:
首先 new StringTest()时先会执行
String str1 = “cai”;
String str2;
这样str1 被初始化成了”cai”
str2被初始化成了null
然后再执行构造方法
str2成了”hua”
区别就是str2被初始化了2,str1被初始化了1回,同时str1声明时为成员变量赋值,那么我们一创建new StringTest()这个对象,这个String str1=”cai”赋值就进行,所以str1优先于构造函数里的str2执行。
我们每次创建这个类的对象,str1都是同一个值,那么每一个新创建的对象的str1值都是被初始成 cai,这样在某些应用场景时有些不灵活,如果我们把赋值语句写在构造函数里,比如:
StringTest(String str){ str= "cai"; }
那么我们每次创建对象时都可以单独为每一个对象赋值不同的str。比如我们创建10个StringTest对象,它们的传值参数可以有10种不同值,所以在有些合适的应用场景里初始化或者赋值可以写进构造器,为每一个对象赋不同的值。
2、不同方式创建的String区别:
String str=new String(“cai”);
String str=”cai”;
第一种创建方式是Java标准的创建方式,这种方式创建的对象将会保存在堆中,每采用这种方式创建一个对象,都会在堆上面新增一个对象;第二种方式会在栈中创建一个对象引用变量str,然后查看栈的字符串池中是否有”cai”,如果没有则把”cai”放入字符串池中,并让str的引用变量指向”cai”,如果字符串池中已经有”cai”的存在,则直接让str的引用指向”cai”即可。这样充分利用了栈的数据共享优点,当然也可能有问题出现,对象很有可能没有创建,只不过指向一个先前已经创建的对象;而new()方法则能保证每次都指向新创建象。
下面我们采用代码来验证:
public class Main { public static void main(String[] args) { String strA = "cai"; String strB = "cai"; String strAA = new String("cai"); String strBB = new String("cai"); System.out.println(strA == strB); System.out.println(strAA == strBB); } }
输出结果:
true
false
strA 和 strB 都是指向同一个内存地址
jvm会先去常量字符串池中找有没有”cai”,有的话就把strA指向”cai”,没有就会先在池中创建一个,再让strB指向”cai”。
String s = new String(“cai”);
这句是先定义一个String变量s,然后在内存中分配新的空间”abc”再让s指向这个内存地址。
相关文章推荐
- Java中String两种不同创建方式的区别
- Java中String两种不同创建方式的区别及intern的用法
- Java中String两种不同创建方式的区别及intern的用法
- Java 创建字符串String的各种方法以及区别
- JAVA中创建字符串的两种方式的区别
- Java中String="hello"和new String("hello')两种创建字符串的区别
- java中创建String类型对象的两种方式以及在使用equals()和“==”两种方法时的区别
- Java中创建字符串的两种方式的区别
- java基础——JAVA中创建字符串的两种方式的区别
- JAVA中创建字符串的两种方式的区别
- Java字符串不同创建方式的理解
- java中,char[ ] subStr=new char[8]是什么意思?跟用String创建的字符串有啥区别?
- 关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- 创建String字符串的方式与区别
- Java对String字符串对象的创建,管理和“+”运算符的实现
- Java string.value() to.String() (String) 这3种强转方式有什么区别
- java对String字符串对象的创建以及管理
- 【转】深入研究java对String字符串对象的创建以及管理
- 深入研究java对String字符串对象的创建以及管理
- 深入研究java对String字符串对象的创建以及管理