日期:2014-05-20 浏览次数:20782 次
static String a = "hello"; // 构建一个内容为 hello 的 String 实例,我们称之为 x 实例,将类静态变量指向 x 实例。 static String b = "Hello"; // 构建一个内容为 Hello 的 String 实例,我们称之为 y 实例,将类静态变量指向 y 实例。 static String c = new String("hello"); // 将 x 实例作为参数传给 String 类的构造参数,构造出另外一个 String 实例 x1。 String a = "hello"; // 将本地变量 a 指向 x 实例。 String b = "hello"; // 将本地变量 b 指向 x 实例。 String c = new String("hello"); // 将 x 实例作为参数传给 String 类的构造参数,构造出又一个 String 实例 x2。
------解决方案--------------------
那static String b = "Hello";和String b = "hello";内存怎么不相等?
static String b = "Hello";先是在栈空间创建b这个Hello(大写的H)
String b = "hello";然后创建这个b的时候,它会先在栈空间里找,看能否找到,如果找不到,再创建hello(小写的H)
String类型的==比较内容Hello!=hello
c的那个是比较对象的引用,分别在堆空间二个地址,怎么可以有相等呢
------解决方案--------------------
给你看看下面的代码吧,
1、 public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = "Monday";
if (s1 == s2)
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");
}
}
输出:s1 == s2
public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");
if (s1.equals(s2))
System.out.println("s1 equals s2");
else
System.out.println("s1 not equals s2");
}
}
程序输出:
s1 != s2
s1 equals s2
原因:程序在运行的时候会创建一个字符串缓冲池