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

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

------解决方案--------------------
这有什么好讲的,你哪里不明白?
------解决方案--------------------
你代码中的那些用引号引起来的那些字符串就是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对象)
额……说了这么多,我语言表达能力不是很好哈,希望楼主能够明白我到底在说些什么……>_<
------解决方案--------------------
楼主里有涉及到匿名对象吗? 
两个引号之间 是完全输出 \为后面的" 是说明"也是打印内容 
字符串equals比较的是内容
这个跟匿名对象有啥关系
经典例子

Stirng str="abc";
String str1=new String("abc");
str==str1 // FALSE 两个对象的内存地址不一样 ~~ 这才是匿名对象

------解决方案--------------------
"\"hello\"equals\"hello\"-->" 这里面就有只有一个String
两个"two" 这里两个String
最后+了 拼接后又是一个String
------解决方案--------------------
估计是那几个"\"把楼主搞晕了,为了结果好看,转义输出了双引号。
"hello"equals"hello"-->true
------解决方案--------------------
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指向这块区域
------解决方案--------------------
http://blog.csdn.net/mengxiangyue/article/details/6818142
看完了你就都明白了
------解决方案--------------------
学习下。。。