String s1 = "hello"; String s2 = "world"; String s3 = "hello"; 此时的s1=s3,String s1 = "hello"; 它是在栈中给s1分配一个变量hello,当s3再次分配的时候它会先去从栈中找看有没有hello变量,如果有就直接连接到那个地址,没有就新创建一个,所以此时s1和s3是指向同一个地址,内容相同,记住,他们是存放在栈中。 s1 = new String("hello"); s2 = new String("hello"); 此时s1 != s2,对与new来说,它是在内存中分配空间,new s1是它会给s1分配一个空间存放hello,当new s2时,它会给s2分配另一空间存放hello,它们的地址是不同的,所以不相等,而且还要注意的是 “=”比较的是引用,相等于地址吧,所以二者不等,但是你用equals时它们就是相等的,即s1.equals(s2)返回的是true,因为它比较的是对象值。记住,new是在内存中分配空间。看看这个,把String s1 = "hello"理解成int i= 1, s1 = new String("hello")理解成 i = new Integer(1); |