三分钟理解Java中字符串(String)的存储和赋值原理
可能很多java的初学者对String的存储和赋值有迷惑,以下是一个很简单的测试用例,你只需要花几分钟时间便可理解。
1.在看例子之前,确保你理解以下几个术语:
栈 :由JVM分配区域,用于保存线程执行的动作和数据引用。栈是一个运行的单位,Java中一个线程就会相应有一个线程栈与之对应。
堆 :由JVM分配的,用于存储对象等数据的区域。
常量池 :在堆中分配出来的一块存储区域,用于存储显式 的String,float或者integer.例如String str="abc"; abc这个字符串是显式声明,所以存储在常量池。
2.看这个例子,用JDK5+junit4.5写的例子,完全通过测试
Java代码
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不同
asse
相关文档:
一:准备 www.savarese.org download
1. rocksaw-1.0.0-src.tar.gz
2. vserv-tcpip-0.9.2-src.tar.gz
二:编译源文件得到jar包 使用Ant
1. build vserv-tcpip-0.9.2-src
在vserv-tcpip-0.9.2目录下面建一个tests目录,然后在cmd窗口下进入 ......
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见。
本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后, ......
原文来自:http://gocom.primeton.com/modules/newbb/item44444_44444.htm
1 基本信息
摘要:
现在有很多的工具将Java代码打包为exe文件,执行时不需要再编写批处理文件,或者在命令行输入长长的classpath信息,为用户使用 ......
instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子:
String s = "I AM an Object!";
boolean isObject = s instanceof Object;
我们声明了一个Str ......
以前用过几次这个东东,但每次都重新查询一次。本文原始出处是这里
。
-----------------------------------------------------------
Keytool
是一个Java
数据证书的管理工具
,Keytool
将密钥(key)和证书(certificates)存在一个称为keystore的文件 ......