三分钟理解Java中字符串(String)的存储和赋值原理
2010-01-20 09:30
561 查看
可能很多java的初学者对String的存储和赋值有迷惑,以下是一个很简单的测试用例,你只需要花几分钟时间便可理解。
1.在看例子之前,确保你理解以下几个术语:
栈 :由JVM分配区域,用于保存线程执行的动作和数据引用。栈是一个运行的单位,Java中一个线程就会相应有一个线程栈与之对应。
堆 :由JVM分配的,用于存储对象等数据的区域。
常量池 :在编译的阶段,在堆中分配出来的一块存储区域,用于存储显式 的String,float或者integer.例如String str="abc"; abc这个字符串是显式声明,所以存储在常量池。
2.看这个例子,用JDK5+junit4.5写的例子,完全通过测试
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import org.junit.Test;
/**
* @author Heis
*
*/
public class StringTest{
@Test
public void testTheSameReference1(){
String str1="abc";
String str2="abc";
String str3="ab"+"c";
String str4=new String(str2);
//str1和str2引用自常量池里的同一个string对象
assertSame(str1,str2);
//str3通过编译优化,与str1引用自同一个对象
assertSame(str1,str3);
//str4因为是在堆中重新分配的另一个对象,所以它的引用与str1不同
assertNotSame(str1,str4);
}
}
1.在看例子之前,确保你理解以下几个术语:
栈 :由JVM分配区域,用于保存线程执行的动作和数据引用。栈是一个运行的单位,Java中一个线程就会相应有一个线程栈与之对应。
堆 :由JVM分配的,用于存储对象等数据的区域。
常量池 :在编译的阶段,在堆中分配出来的一块存储区域,用于存储显式 的String,float或者integer.例如String str="abc"; abc这个字符串是显式声明,所以存储在常量池。
2.看这个例子,用JDK5+junit4.5写的例子,完全通过测试
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import org.junit.Test;
/**
* @author Heis
*
*/
public class StringTest{
@Test
public void testTheSameReference1(){
String str1="abc";
String str2="abc";
String str3="ab"+"c";
String str4=new String(str2);
//str1和str2引用自常量池里的同一个string对象
assertSame(str1,str2);
//str3通过编译优化,与str1引用自同一个对象
assertSame(str1,str3);
//str4因为是在堆中重新分配的另一个对象,所以它的引用与str1不同
assertNotSame(str1,str4);
}
}
相关文章推荐
- 三分钟理解Java中字符串(String)的存储和赋值原理
- 三分钟理解Java中字符串(String)的存储和赋值原理
- 三分钟理解Java中字符串(String)的存储和赋值原理
- 三分钟理解Java中字符串(String)的存储和赋值原理
- 理解Java中字符串(String)的存储和赋值原理
- 理解Java中字符串(String)的存储和赋值原理
- 三分钟理解Java中字符串(String)的存储和赋值原理
- 三分钟理解Java中字符串(String)的存储和赋值原理
- 三分钟理解Java中字符串(String)的存储和赋值原理
- Java中字符串(String)的存储和赋值原理以及String\StringBuffer\StringBiulder的异同
- 三分钟理解Java中字符串(String)的存储和赋值原理
- 三分钟理解Java中字符串(String)的存储和赋值原理
- Java中字符串(String)的存储和赋值原理
- Java中字符串(String)的存储和赋值原理
- Java常量字符串String理解 String理解
- Java String 字符编码原理,可以帮助理解乱码问题
- Java基础(11):字符串—深入理解String对象和比较符==和equals的不同
- 三分钟理解Java继承和多态原理
- 【深入Java字符串】(1)Java String设计原理
- 理解Java常量池--从JVM原理上理解字符串的比较