public class Demo{
public static void main(String[]args){
System.out.println("\"hello\"equals\"hello\"-->"+("two".equals("two")));
}
}谁能详细讲解一下语句中string匿名对象啊,详细的给高分!!!

解决方案 »

  1.   

    你代码中的那些用引号引起来的那些字符串就是String的匿名对象,比如说你的“two”就是一个匿名对象,代码中equals比较两个对象中的内容是否相同,这边因为两个对象内容相同所以返回的是True。
    一个经典的例子:String str = new String("abc");
    以上的语句中其实系统创建了2个String的对象,一个就是楼主所说的匿名对象"abc"喽,还有一个就是一般对象的创建方法,即使用new关键字来显式的创建一个对象,这里str只是引用的new出来的那个对象,而那个直接在heap中创建的匿名对象则在String池中,并不是str所引用的,但是以后如果有String str2 = "abc";的语句,则是直接使用这个String池中的对象,不必重新创建(这里注意一下:如果是以String xxx = “xxxxxxxx”之类的申明,只要所申明的字符串的内容一样,则不会再heap中重新开辟空间,而是多个引用都引用一个heap中的那个String对象)
    额……说了这么多,我语言表达能力不是很好哈,希望楼主能够明白我到底在说些什么……>_<
      

  2.   

    楼主里有涉及到匿名对象吗? 
    两个引号之间 是完全输出 \为后面的" 是说明"也是打印内容 
    字符串equals比较的是内容
    这个跟匿名对象有啥关系
    经典例子Stirng str="abc";
    String str1=new String("abc");
    str==str1 // FALSE 两个对象的内存地址不一样 ~~ 这才是匿名对象
      

  3.   

    "\"hello\"equals\"hello\"-->" 这里面就有只有一个String
    两个"two" 这里两个String
    最后+了 拼接后又是一个String
      

  4.   

    估计是那几个"\"把楼主搞晕了,为了结果好看,转义输出了双引号。
    "hello"equals"hello"-->true
      

  5.   

    1.String str =new String("abc")
    2.String str2 = "abc"
    你所说的匿名字符串是不是后者
    给你说下这两种定义在内存中的分布
    1. 首先在栈空间有一个引用str  
       关键是赋值 号右边,  new String(""); 看原代码会发现,这括号里面的字符串,实现上是一个char【】数组
       并不是有些人说的 “在字符串池中的"abc"” 
       new String("abc") 执行完成后,会在堆空间中有一块区域 : 是char类型的数组:它里面放着 a b c
      而string 自己的内存空间中有一个value的成员变量指向了char类型数组的空间
       内存指向为: str -- 指向string 对象(string 内存中有value成员变量 ---指向char[] 数组的内存区域)
    2.而第二种情况 就会简单一些:
       栈空间str2 ,字符串池中 存放着 "abc" 对象  str2指向这块区域
      

  6.   

    http://blog.csdn.net/mengxiangyue/article/details/6818142
    看完了你就都明白了