java - 为什么这会根据变量的最终结果给出不同的结果

标签 java

public class Example {

public static void main(String[] args) {

    String a = "abc"; // Line 5
    String b = a + "d"; // Line 6
    String c = "abc"+ "d"; // Line 7
    String d = "abcd"; //Line 8

    System.out.println(b==c); //Line 10 
    System.out.println(c==d); //Line 11
}
}

输出:

如果我们看到引用号。变量'b'指向“abcd”字符串对象和Ref。变量“c”也指向相同的 String 对象,即“abcd”,但是当我们使用 ==(双等于运算符)运算符检查相等性时,它会在第 10 行打印 false。变量 'a' 作为最终变量,然后在第 10 行打印 true

所以我有点困惑。谁能告诉我这背后发生了什么?

最佳答案

制作a Final 允许编译器解释 b = a + "d";完全像 c = "abc"+ "d"; ,因为 a 的值无法更改。

在这种情况下,编译器可以很容易地看到 a没有改变,但是 javac不会进行非常复杂的代码分析,因此您需要通过制作 a 来帮助它Final 以便编译器在编译时进行优化。

关于java - 为什么这会根据变量的最终结果给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49655545/

相关文章:

Java/泛型/数组问题

java - 字符串常量上的 NullPointerException

java - 如何刷新 Selenium Java Webdriver 中的挂起页面?

java - oracle数据库客户端安装位置里面的JDK有什么用处?

java - spring roo条件数据库请求

java - Java Persistence API 中 FetchType LAZY 和 EAGER 的区别?

java - 一个 Servlet Controller 与多个 Controller

运行主类的Java命令

Java Swing 文本框和按钮未显示在表单中?

java.lang.RuntimeException : java. sql.SQLException: 字段 'UserName' 没有默认值