-1

我有这段代码,为什么 bo3= st1 == st2 给出 true ?

它们在内存中的位置是不是不同,通过==我们比较位置是否相同!

另外,如果有什么不对的,请指出我。感谢你们。

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);
}

当我输入“玛丽”时,我有另一个代码,结果:同名而不等于

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");
}
4

2 回答 2

0

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

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

当您使用连接或构造函数创建字符串时,不一定是这样:

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

没有保证test==test2or test2==test3,但equals()它仍然是真实的。

于 2013-11-09T11:55:49.307 回答
0

st1==st2 为真,因为它们都引用同一个 String 对象。

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

于 2013-11-09T11:55:50.403 回答