s1和s2指向的地址一样的,jvm运行的时候会用一个东西替换掉所有你西的"hello"
但s3和s4是调用的stirng(String a)的构造函数,所以它们指的对象在堆中的位置不一样。不知道说的对不对你可以记住就是这样的就可以.

解决方案 »

  1.   

    String s1 = "hello";
    String s2 = "hello";
    String s3 = new String("hello");
    String s4 = new String("hello");
    为什么
    System.out.println(s1==s2) 打印true//比较字符串常量,很多人都认为是常量池里什么的,
    System.out.println(s3==s4) 打印false//比较两个对象,当然不是一个
    System.out.println(s1==s4) 打印false//字符串常量跟一个对象呵呵,明显不能出true
      

  2.   

    可以使用String类中的public boolean equals(String s)方法比较一字符串是否与字符串s相同。如:String tom= "we are students";
    String boy= "We are students";
    String jerry= "we are students";
    tom.equals(boy)的值是false,
    tom.equals(jerry)的值是 true。
    注意:tom==jerry的值是false。
    因为字符串是对象,tom,jerry是引用。
    还可以使用public boolean equalsIgnoreCase(Strin s)方法来比较一个字符串是否和字符串 s相同,但忽略大小写。如:tom.equalsIgnoreCase(boy)的值是true。字符串对象s可以使用String类中的public int compareTo(String  another)方法,按辞典序与参数another指定的字符串比较大小。如果s与another相同,该方法返回值0;如果s大于another,该方法返回正值;如果s小于another,该方法返回负值,例如:String s= "abcde";s.compareTo("boy")的值小于0;s.compareTo("aba")的值大于0;s.compareTo("abcde")的值等于0。
    按辞典序比较两个字符串还可以使用public int compareToIgnoreCase(Strin s)方法,该方法忽略大小写。
      

  3.   

    你在里面搜索一下,标题中应该含有"初学"之类的字样,有一个专门讨论这个问题.因为
    String s1 = "hello";
    String s2 = "hello";
    这两个对象s1和s2都是指向同一个对象(即,他们之间有一种引用关系),有些类似于s2=s1;
    至于为什么,你看了那篇文章,你就清楚了,我不多说了.而后面两句,因为你显示地使用了new,所以必然要重新生成对象.