Java String的两种初始化方法的一点区别
2016-10-03 15:40
225 查看
Java的两种初始化方法的一点区别其实是因为栈的共享数据的特性造成的,
java中创建并初始化一个String对象,最常见的方式有两种:
String str=new String(“XXX”);
String str=”XXX”;
二者看似相同,其实有很大的差别。
前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会在堆上面创建一个新的对象;后者则会在栈中创建一个对象引用变量str,然后查看字符串池中是否存在”XXX”,如果没有,则将”XXX”存放字符串池,并令引用变量str指向它;如果已经有”XXX”,则直接令str指向它。这样充分利用了栈的数据共享优点,当然也可能是一个陷阱,对象很有可能没有创建,只不过指向一个先前已经创建的对象;而new()方法则能保证每次都指向新创建象。
下述代码展示了二者的不同:
public class Main {
}
输出结果:
true
false
字符串限定是指String s = “abc”这种形式,也就是说String s1 = “abc”;
s 和 s1 都是指向同一个内存地址
String s = “abc”;
这句是定义一个String变量s,jvm会先去常量字符串池中找有没有”abc”,有的话就把s指向”abc”,没有就会先在池中创建一个,再让s指向”abc”。
String s = new String(“abc”);
这句是先定义一个String变量s,然后在内存中分配新的空间”abc”再让s指向这个内存地址。
java中创建并初始化一个String对象,最常见的方式有两种:
String str=new String(“XXX”);
String str=”XXX”;
二者看似相同,其实有很大的差别。
前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会在堆上面创建一个新的对象;后者则会在栈中创建一个对象引用变量str,然后查看字符串池中是否存在”XXX”,如果没有,则将”XXX”存放字符串池,并令引用变量str指向它;如果已经有”XXX”,则直接令str指向它。这样充分利用了栈的数据共享优点,当然也可能是一个陷阱,对象很有可能没有创建,只不过指向一个先前已经创建的对象;而new()方法则能保证每次都指向新创建象。
下述代码展示了二者的不同:
public class Main {
public static void main(String[] args) { String strA = "abc"; String strB = "abc"; String strAA = new String("abc"); String strBB = new String("abc"); System.out.println(strA == strB); System.out.println(strAA == strBB); }
}
输出结果:
true
false
字符串限定是指String s = “abc”这种形式,也就是说String s1 = “abc”;
s 和 s1 都是指向同一个内存地址
String s = “abc”;
这句是定义一个String变量s,jvm会先去常量字符串池中找有没有”abc”,有的话就把s指向”abc”,没有就会先在池中创建一个,再让s指向”abc”。
String s = new String(“abc”);
这句是先定义一个String变量s,然后在内存中分配新的空间”abc”再让s指向这个内存地址。
相关文章推荐
- java中的string定义的两种方法和区别
- Java中两种字符串初始化方法的区别
- java String 转 Long 两种方法区别
- java中创建String类型对象的两种方式以及在使用equals()和“==”两种方法时的区别
- Java中两种字符串初始化方法的区别
- java String 转 Long 两种方法区别
- java中String的两种初始化方法
- Java中两种字符串初始化方法的区别
- java中String的两种初始化方法
- 关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- java中String 相关及“==”与equals方法区别
- java中常见面试题String,StringBuffer,StringBulider 的区别及相应的使用方法介绍
- Java—String的两种赋值方式及区别
- Java中两种区别不同类型Exception的方法
- Java线程之两种方法Runnable和Thread的区别
- java中区别toString() ,(String),valueOf()方法
- Java中两种String对象创建和初始化…
- java中Map和List初始化的两种方法
- String定义的两种方法的区别
- Java中区别.toString() ,(String),valueOf()方法