java - 字符串等于和 == 与字符串连接

标签 java string equals string-concatenation

<分区>

我试图理解字符串连接与字符串比较的输出。需要明确的是,我有类(class)使用 == 和等号来比较两个字符串。我正在尝试将 == 和 equals() 的输出连接到一个字符串。 equals() 的输出连接,但 == 连接的输出。使用java的装箱功能,与字符串连接的 boolean 值将接触。据我所知,等于和 == 都返回 boolean 值。那么为什么会有这种差异呢?谁能解释一下?

public class StringHandler {

    public void compareStrings() {
        String s1 = new String("jai");
        String s2 = "jai";
        String s3 = "jai";
        System.out.println("Object and literal compare by double equal to :: "
                + s1 == s2);
        System.out.println("Object and literal compare by equals :: "
                + s1.equals(s2));
        System.out
                .println("Literal comparing by double equal to :: " + s2 == s3);
        System.out.println("Literal comparing by equals :: " + s2.equals(s3));
    }

    public static void main(String[] args) {
        StringHandler sHandler = new StringHandler();
        sHandler.compareStrings();
    }
}

输出

false
Object and literal compare by equals :: true
false
Literal compareing by equals :: true

更新:回答

如果 s1==s2 没有括号,JVM 会将字符串比较为“对象和文字比较, double 等于::jai”== “jai”,结果为 false。所以 sysout 中的实际内容并没有被打印出来。添加括号后,JVM 将字符串与“jai”==“jai”进行比较,结果为

对象和字面量比较等于::true

最佳答案

当你做的时候

System.out.println("Object and literal compare by double equal to :: "
            + s1 == s2);

您首先将字符串 "Object and literal compare by double equal to::" 与字符串 s1 连接起来,这将给出

"Object and literal compare by double equal to :: jai"

然后,您将检查此字符串是否与 s2 相同(相同的引用):

"Object and literal compare by double equal to :: jai" == "jai"

这将是 false(输出将是 false)。

换句话说,这是因为运算符优先。 “操纵”运算符优先级的一种方法是使用括号。先解析括号内的操作:

System.out.println("Object and literal compare by double equal to :: " + (s1 == s2));

关于java - 字符串等于和 == 与字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24320304/

相关文章:

java - 如何覆盖 java 枚举中的(最终)equals 方法?

java - 如何编写 Java EE/EJB 单例?

java - 如何从 onSensorChanged 获取加速度计值到 ThreatForLoopA 类?

java - 为什么两个最低和最高优先级的线程仍然交错?

java - build.properties 和 build.xml

java - 从java中的字符串中获取整数

java - 使用运算符创建字符串

java - 如何在 Java 中检查 LinkedHashMap 的相等性——还要考虑插入顺序?

java - 如何检查 ArrayList<ArrayList<String>> 是否包含某个 ArrayList<String>

c++ - 为什么#include <string> 在这里防止堆栈溢出错误?