比较两个字符串给出真实

时间:2013-11-09 11:52:36

标签: java string

我有这个代码,为什么bo3 = st1 == st2给出了真的?

不是它们在记忆中处于不同的位置,而是通过==我们比较位置是否 它是一样的与否!

如果出现问题,请指出我。谢谢你们。

public static void main(String[] args) {

    String st1 = "HELLO";
    String st2 = "HELLO";
    String st3 = "hello";


    int comp1 = st1.compareTo(st2);  // equal 0
    int comp2 = st1.compareTo(st3);  // -32

    boolean bo1 = st1.equals(st2); //true
    boolean bo2 = st1.equals(st3); // false , if ignoreCase will be true

    boolean bo3 = st1==st2; //true    ??????????? should not be true
    boolean bo4 = st1 == st3; //false


    int ind1 = st1.indexOf("L"); // 2
    int ind2 = st1.lastIndexOf("L"); // 3

    boolean con = st1.contains("LLO"); //true


    System.out.println(bo3);
}

当我输入“Mary”时我有另一个代码,结果是: 同名且不相等

public static void main(String [] args) {

    Scanner keyboard = new Scanner(System.in);
    System.out.print("What is your name? ");
    String name = keyboard.next();

    if (name.equals("Mary"))
        System.out.print("Same name");
    else
        System.out.print("Different name");

    if (name == "Mary")
        System.out.println("equal");
    else
        System.out.println("not equal");
}

2 个答案:

答案 0 :(得分:0)

==的这种行为有点巧合,因为您使用"test"创建了字符串。许多带字符串的==行为都是特定于实现的。只保证equals()能够比较字符串值。

比较字符串时,总是尽可能使用equals(),因为字符串 NOT 保证被实习。当您使用这样的文字时,编译器会将字符串放入字符串池中,并使代码中的所有相同文字字符串指向同一个String对象。

当您使用串联或构造函数创建字符串时,同样不一定如此:

String test="test";
String test2=new String("test");
String t="te";
String s="st"
String test3=t+s;

无法保证test==test2test2==test3,但equals()仍然可以。{/ p>

答案 1 :(得分:0)

st1 == st2为true,因为它们都引用相同的String对象。

这篇文章应该有所帮助:http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html