是不是这个意思:字符串"ID",被JVM管理,可以被两个不同的应用程序共同指向。但是指向该字符串的引用是独立的,是被复制拷贝的,如果更改一个字符串引用,那么更改的只是该引用,与这个引用以前所指向的那个字符串相关连的其他引用无关。public class Test
{
public static void main(String[] args)
{
String ID = "ID";
changeString( ID );
System.out.println( ID );
}
static void changeString( String str )
{
str = "JF";
}
}引用没有被共享。
{
public static void main(String[] args)
{
String ID = "ID";
changeString( ID );
System.out.println( ID );
}
static void changeString( String str )
{
str = "JF";
}
}引用没有被共享。
public class Test{
String test1="xuchaoyang1";
String test2="xuchaoyang1";
String test3=new String("xuchaoyang2");
String test4=new String("xuchaoyang2");
public static void main(String args[])
{
if(test1==test2)
System.out.println("true");
else System.out.println("false");//这里输出true,是不是说明了第一个问题,
//不可变字符串“xuchaoyang1”被编译器制定为共享
// 所以输出trueif(test3==test4)
System.out.println("true");
else System.out.println("false");//这里输出false,是不是说明了第二个问题,
//不可变类String不会被编译器设为共享
}
}
第2句如下:String stra="hello world";
String strb=stra;/*该句并不会使strb与stra指向同一个对象,而是为strb创建了一个
="hello world“的副本,因此stra与strb指向不同的两个内存地址,只是两者的内容相同,以我的的推测,原文中第一处应为public,第二处应为share
定义一个string类型的变量有两种方式:
string name="tom";
string name =new string("tom")
使用第一种方式的时候,就使用了串池,
使用第二中方式的时候,就是一种普通的声明对象的方式
如果你使用了第一种方式,那么当你在声明一个内容也是"tom"的string时,它将使用串池里原来的那个内存,而不会重新分配内存,也就是说,string saname="tom",将会指向同一块内存另外关于string类型是不可改变的问题:
string类型是不可改变的,也就是说,当你想改变一个string对象的时候,比如name="madding"
那么虚拟机不会改变原来的对象,而是生成一个新的string对象,然后让name去指向它,如果原来的那个"tom"没有任何对象去引用它,虚拟机的垃圾回收机制将接收它。
据说这样可以提高效率!!!哈哈