当前位置: 首页 > 面试题库 >

如果==比较Java中的引用,为什么使用这些字符串将其评估为true?

张亦
2023-03-14
问题内容

如前所述,==运算符比较对象引用以检查它们是否引用堆上的同一对象。如果是这样,为什么我得到这段代码的“等于”?

public class Salmon {
    public static void main(String[] args) {

        String str1 = "Str1";
        String str2 = "Str1";

        if (str1 == str2) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
    }
}

问题答案:

程序将打印Equal(至少使用Sun Hotspot和suns
Javac。)此处在http://ideone.com/8UrRrk上进行了演示。

这是因为该字符串字面常量存储在一个事实 串池 和字符串的引用 可以 被重复使用。

进一步阅读:

  • 什么是字符串文字池?
  • 字符串实习

但是:

public class Salmon {
    public static void main(String[] args) {

        String str1 = "Str1";
        String str2 = new String("Str1");

        if (str1 == str2) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
    }
}

Not equal由于new可以保证会引入新的参考,因此将进行打印。

因此,经验法则: 始终使用该equals方法比较字符串。



 类似资料:
  • 问题内容: 我必须从D / B检索一组列值并将其作为条件进行检查。 例如,我将有像字符串,在d / B柱。(值是一直比较的值)。我将在代码中声明一个变量值,我应该评估这种情况。 我怎样才能做到这一点??任何帮助都受到赞赏。谢谢。 问题答案: 这是使用标准(Java 1.6+)脚本库的示例:

  • 问题内容: 我有以下几行代码来比较String。str1不等于str2,这是可以理解的,因为它比较对象引用。但是,为什么s1等于s2? 输出: 问题答案: 字符串常量池实际上将缓存所有字符串文字,因此它们是下面的同一对象,这就是为什么你看到要执行输出的原因。本质上,这是对VM的一种优化,可以避免每次声明文字时都创建新的字符串对象,这可能会很快变得非常昂贵!在你的示例中,你明确地告诉VM创建新的字符

  • 问题内容: 好的,这很愚蠢,但是wtf还在继续吗? 我在Servlet中有一个String变量,它接受参数的值,并基于该值进行测试以执行某些操作,但是该方法不起作用。问题是什么? 在控制台上,System.out.println向我显示了动作的价值是“某物” 问题答案: 您的第二个比较是错误的。您还应该使用代替,例如: 该运算符比较 引用 的(字符串)对象和正常情况下 等于 字符串不自动具有相同的

  • 问题内容: 我有一个Android应用程序,我想检查安装的应用程序名称是否与传递给包含此代码的函数的字符串匹配。代码和示例如下: 假设您打过电话,并且手机上的应用程序名称与返回的名称相同。但是,它永远不会。我记录了结果,它应该匹配,但事实并非如此。任何人都可以请问我为什么这行不通吗? 问题答案: 使用String的equals()方法代替==运算符来比较字符串: 在Java中,新手遇到的最常见错误

  • 问题内容: 我有一个关于Java字符串的简单问题。以下简单代码段仅连接两个字符串,然后将它们与进行比较。 比较表达式concat==”string”返回false那么明显(I明白之间的差值equals()和==)。 当这样声明这两个字符串时final, 比较表达式在这种情况下返回。为什么有所作为?它与实习生池有关系吗,还是我被误导了? 问题答案: 当你将(是不可变的)变量声明为,并使用编译时常量表

  • 问题内容: 我在进行一些MySQL测试查询,并意识到将字符串列与(作为数字)进行比较可以得出! 但是,将其与其他任何数字(正数或负数,整数或十进制数)进行比较,将得到预期的结果(当然,除非字符串是数字以字符串的形式表示) 当然,按预期将字符串与as字符串进行比较会得出false。 但是,为什么它如此呢? 这是为什么? 问题答案: MySQL自动将字符串转换为数字: 不以数字开头的字符串的值为0: