在java中动态传递字符串值的相等运算符bevaiour [重复]

Posted

技术标签:

【中文标题】在java中动态传递字符串值的相等运算符bevaiour [重复]【英文标题】:Equality operator bevaiour for dynamically passed string values in java [duplicate] 【发布时间】:2016-04-11 13:32:20 【问题描述】:
public class EqualsCheck 

    /**
     * @param args
     */
    public static void main(String[] args) 
        Scanner sc= new Scanner(System.in);
        Scanner sc1= new Scanner(System.in);
        String s1 = sc.next();
        String s2 = sc1.next();
        equalCheck(s1,s2);
    

    private static void equalCheck(String s1, String s2) 
        //Using Assignment
        System.out.println(s1 == s2);

        //Using equals

        System.out.println(s1.equals(s2));

        //Printing HashCode

        System.out.println("s1 :"+s1.hashCode()+" s2: "+s2.hashCode());
    

传递的字符串是:

 s1 = "abc";
 s2 = "abc";

如果我执行s1==s2,它会返回false。为什么字符串池在这里不起作用。

【问题讨论】:

s1.equals(s2) 按预期返回 true。 我投票结束这个问题作为离题,因为这个问题之前已经回答过一百万次了 “使用赋值”这里没有赋值。这是使用 identity. 不涉及任何字符串池。您正在从 sc 读取两个新字符串。 【参考方案1】:

字符串池在这里不起作用,因为您没有将字符串放入字符串池中。

对于在运行时构造的字符串,这不会自动发生。您需要致电 String.intern() 这样做。

【讨论】:

以上是关于在java中动态传递字符串值的相等运算符bevaiour [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java 判断字符串是否相等

Java 值传递 和引用传递

JAVA判断字符串相等

Java 中字两个字符串判断是否相等(转载)

如何将字符串数组动态传递给Java中的SQL“IN”子句? [复制]

Java中比较字符串的内容是不是相等内部是如何比较的?还有比较字符串与比较它的哈希值哪个快?