Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较两个字符串可以得到true_Java_String - Fatal编程技术网

Java 比较两个字符串可以得到true

Java 比较两个字符串可以得到true,java,string,Java,String,我有这个代码,为什么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

我有这个代码,为什么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);
}
当我输入“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");
}

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

在比较字符串时,请尽可能使用
equals()
,因为字符串不能保证被插入。当您使用这些文本时,编译器将字符串放入字符串池,并使代码中的所有相同文本字符串指向相同的字符串对象

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

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

无法保证
test==test2
test2==test3
,但是使用
equals()
它仍然是真的。

st1==st2是真的,因为它们都引用相同的字符串对象


这篇文章应该会有所帮助:

Java将字符串添加到字符串池以减少内存使用,因此第一个示例中的st1和st2将指向相同的内存位置。