Java 为什么产出会有差异

Java 为什么产出会有差异,java,Java,我有两个程序,如下所示 当我运行这两个程序时,它们都工作得很好 但是当我比较第一个代码时,它有一个两个字符串,结果是“ok” 第二个代码也有两个字符串,但结果是“否”。为什么 } }因为您在比较引用,在第一种情况下,它们引用相同的对象,在第二种情况下 其次,它们没有。这是由于Java对字符串的内部处理。您应该始终避免使用str1==str2。使用str1.equals(str2)代替。我同意@blafasel的建议,除非你真的想问“是str1和str2都是null还是都指向同一个字符串对象?”。

我有两个程序,如下所示

当我运行这两个程序时,它们都工作得很好

但是当我比较第一个代码时,它有一个两个字符串,结果是“ok”

第二个代码也有两个字符串,但结果是“否”。为什么

}


}

因为您在比较引用,在第一种情况下,它们引用相同的对象,在第二种情况下


其次,它们没有。这是由于Java对字符串的内部处理。您应该始终避免使用str1==str2。使用str1.equals(str2)代替。我同意@blafasel的建议,除非你真的想问“是
str1
str2
都是null还是都指向同一个字符串对象?”。正如问题所示,很难预测何时生成新的字符串对象或何时“重用”现有的字符串对象(除非你使用interning)。因此,在这一点上,我倾向于更基本一些。我可能想提到的是,在第一种情况下,java在编译过程中创建了一个带值的字符串,而在第二种情况下,to lower被运行,这一事实迫使它们成为具有不同引用的两个不同对象。
class Stringimp {

      public static void main(String[] args) {

      String str = "ali";
      String s1="ali";
      if (str == s1) {
        System.out.println("ok");
      } else {
      System.out.println("no");
    }
 }
 class Stringimp {

       public static void main(String[] args) {

       String str = "ali";
       String s1="ALI";
       s1=s1.toLowerCase();
       if (str == s1) {
           System.out.println("ok");
       } else {
           System.out.println("no");
       }
  }