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

String初始化 之小牛角尖问题
String s0 = "abc";
String s1 = "abc";
String s2 = new String("c");
String s3 = new String("c");

System.out.println(s0==s1);
System.out.println(s2==s3);


运行结果是:
  true
  flase

谁能解释一下原因?

------解决方案--------------------
论坛里问这样问题的很多,每隔一断时间就有几个来问的,其实自己在google下搜会搜到很多讲解,在论坛里也能找到之前问问题的帖子。程序这东西,自己找些资料来看会收获很多,不一定遇到问题就马上问的。这种基础问题,希望大家自己动动手,马上就知道为什么。

------解决方案--------------------
建议楼主先静下心来认真阅读Java基础关于String的介绍,书上肯定有这个问题的解释!或者找一些关于Java内存分析的资料自己看一看!
简单解释一下吧,在Java中,只有我们new一个对象时才会在内在中开辟新的空间。“==”测试的是左右两边的对象是不是同一个对象,对于s0和s1,因为我们没有new,所以它们都指向了"abc"这个对象,所以打印出来就是true。而s2和s3,由于两个变量所指的对象都是new出来的,所以虽然它们的内容相同,但是两个对象对应的内在中的地址是不同的。如果想要比较它们的内容,请使用String对象的equals方法。System.out.println(s2.equals(s3))打印出来的结果就是true了。