日期:2014-05-20  浏览次数:20822 次

不理解一段代码,找人看下
public   class   Test
{
public   static   void   main(String   args[])
{
String   s0   =   "Hello ";
String   s1   =   "Hello ";
String   s2   =   "Hell "   +   "o ";
String   s3   =   new   String( "Hello ");
String   s4   =   new   String( "Hello ");
System.out.println(s0   ==   s1);   //true
System.out.println(s1   ==   s2);   //true
System.out.println(s1   ==   s3); //false
System.out.println(s3   ==   s4); //false
System.out.println(s3.equals(s4)); //true
System.out.println(s2.equals(s3)); //true
}
}

刚学java,有些东西不理解。上面这段代码中s3、s4不是指向同一个对象,s0、s1为什么指向同一个对象?String   s0   =   "Hello ";和String   s3   =   new   String( "Hello ");不是等同的吗?请教大家这两句有什么区别。

------解决方案--------------------
是这样的S0 是把数据放在缓冲池中间 ,S3 是在动态分配区重新申请一块内存
String s0 = "Hello " 是先在缓冲池中找有没有相同的数据有的话直接把s0映射到这个地址
String s3 = new String( "Hello "); 是在内存中申请一个新的区域 把 "Hello "写进去,再把这个区域的首地址给s3,所以地址会不同