黑马程序员技术交流社区

标题: 求高手讲解一下String类 [打印本页]

作者: 李杰    时间: 2012-8-28 14:41
标题: 求高手讲解一下String类
看下面代码
  1. String a=new String ("abc");
  2.                 String b="abc";
  3.                 System.out.println(a==b);
复制代码
为什么是false;不是内存已经存在“abc”了吗?
作者: 冯心程    时间: 2012-8-28 14:55
String a=new String ("abc");   abc在对象中
String b="abc"; 在String的池中

对象比当然是false  如果你这样
String a="abc", b="abc";     a==b 就是true

接着如果
String a=new String("abc");
String b=new String("abc");
  a==b 就是flase  、、、  对象
  a.equals(b)  就是true、、、、值

作者: 周兴华    时间: 2012-8-28 14:57
String a=new String ("abc");  //new String("abc")创建了一个对象,变量a指向它

String b="abc";  //变量b指向字符串池中的字符串对象“abc”

System.out.println(a==b);  //因为a和b指向不同的对象,故结果为false

作者: 黑马胡威    时间: 2012-8-28 15:48
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:


     String str = "abc";
等效于:


     char data[] = {'a', 'b', 'c'};
     String str = new String(data);
上面是JDK API中的内容,也就是说字符串和字符数组的引用都代表一个地址楼主的引用中
String a=new String ("abc"); //指向一个地址0x0039
String b="abc";//指向另一个地址0x0040
a 和 b的值当然不同。
而且字符串是常量,不同与基本数据类型的常量定义。

作者: 黑马_许芸    时间: 2012-8-28 15:56
额,回答过一次这个问题。不过不小心把String Pool拼写错了。
http://bbs.itheima.com/forum.php ... mp;page=1#pid135707




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2