+ -
当前位置:首页 → 问答吧 → 关于string内容

关于string内容

时间:2011-10-19

来源:互联网

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

作者: xfsunxiaolong   发布时间: 2011-10-19

这有什么好讲的,你哪里不明白?

作者: ioe_gaoyong   发布时间: 2011-10-19

你代码中的那些用引号引起来的那些字符串就是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对象)
额……说了这么多,我语言表达能力不是很好哈,希望楼主能够明白我到底在说些什么……>_<

作者: Listening_music   发布时间: 2011-10-19

楼主里有涉及到匿名对象吗? 
两个引号之间 是完全输出 \为后面的" 是说明"也是打印内容 
字符串equals比较的是内容
这个跟匿名对象有啥关系
经典例子

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

作者: nizhicheng   发布时间: 2011-10-19

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

作者: kiss601459202   发布时间: 2011-10-19

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

作者: xiongyu2006   发布时间: 2011-10-19

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指向这块区域

作者: s394500839   发布时间: 2011-10-19

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

作者: mengxiangyue   发布时间: 2011-10-19