Java字符串引用

时间:2015-04-16 17:02:50

标签: java string reference

当我运行以下代码时

public class Test {
    public static void main(String[] args) {
        System.out.println(args[0]);
        System.out.println("testing");
        System.out.println(args[0] == "testing");
    }
}
使用

  

java测试测试

在命令行中,它打印以下内容:

测试
测试

我的理解是,在比较字符串时,==比较字符串的引用,而不是它们的值。对于以下代码中的两个字符串,我如何找出它们的引用?

System.out.println(args[0] == "testing");

2 个答案:

答案 0 :(得分:2)

比较equals()时,您可以使用compareTo()equalsIgnoreCase()Strings

如果您想对内存位置执行某些操作,我只需要参考,但我不确定您为什么要这样做。

这违背了Java的目的,你应该切换到C,如果这是你正在寻找的,或者你想对内存地址执行操作。

答案 1 :(得分:0)

  

我的理解是,在比较字符串时,==比较字符串的引用,而不是它们的值

实际上;但是然后在上面的句子中用String替换Object,或者确实实现Object 的任何类(实际上,这意味着每个Java类)和上述句子将举行......

除了“价值”太模糊。

Java中有一个基本合同,即Object的{​​{1}}和.equals()。它们本质上是彼此联系在一起的。他们基本上定义的是等价合同。

.hashCode()的基本等价合同很简单,真的;给定两个Object s Objecto1,确实如此:

o2

严格等同于:

o1.equals(o2)

但这仅仅是因为o1 == o2 Object被定义为:

.equals()

现在,当然,// pseudo code... public boolean equals(final Object o) { returns this == o; } 不适用。 String有状态(字符),String没有。因此Object“精炼”String。这意味着,即使你有:

.equals()

不正确

String s1 = "hello world";
String s2 = "hello world";

(除了特定的,不相关的情况),但 为真:

s1 == s2

作为“副作用”,这也意味着s1.equals(s2) 也必须“细化”String,因为合同明确规定.hashCode()的两个对象必须具有同样的equals()