我在java编程测试中看到了一个问题......
如果str1和str2都是字符串, 以下哪个表达式将正确确定 他们是否平等?
(1)(str1 == str2)
(2)str1.equals(str2)
(3)(str1.compareTo(str2)== 0)
A)1,2和3都可以使用
B)2和3
C)1和2
D)1和3
我认为答案是B.教科书证实了这一点。老师的回答键也证实了这一点。
我尝试过测试所有选项。这三个都奏效了。我认为问题的意思是"如果str1和str2都是String对象"。当我创建字符串对象时,它确认B是正确的。以下是代码......
我想要做的是打印字符串的内存地址以黑白证明它是比较内存地址而不是字符串。我看到有人偶然这样做过,我们意识到发生了什么。它是用非常简单的代码完成的,但我们无法记住偶然的语法。 我知道地址应该包含@字符。我已经研究了几个小时,我不认为哈希码是地址,因为它对于两个字符串是相同的,它应该是不同的。有人可以在我的代码中添加打印这两个地址所需的内容吗?
public class Q1
{
public static void main(String[] args)
{
String str1 = new String("dog");
String str2 = new String("dog");
System.out.println(str1 + " & " + str2);
System.out.println("Hash Codes");
System.out.println(str1 + Integer.toHexString(str1.hashCode()));
System.out.println(str2 + Integer.toHexString(str2.hashCode()));
System.out.println();
if (str1 == str2)
{
System.out.println(str1 == str2);
System.out.println("1 Equal");
System.out.println();
}
else
{
System.out.println(str1 == str2);
System.out.println("1 Not Equal");
System.out.println();
}
if (str1.equals(str2))
{
System.out.println(str1.equals(str2));
System.out.println("2 Equal");
System.out.println();
}
else
{
System.out.println(str1.equals(str2));
System.out.println("2 Not Equal");
System.out.println();
}
if (str1.compareTo(str2) == 0)
{
System.out.println(str1.compareTo(str2) == 0);
System.out.println("3 Equal");
System.out.println();
}
else
{
System.out.println(str1.compareTo(str2) == 0);
System.out.println("3 Not Equal");
System.out.println();
}
}
}
答案 0 :(得分:0)
简单回答:不,你不能。
Object.hashCode()
可能返回对象的内部地址,但它依赖于实现。您可以在Javadocs处查看。
尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
例如,默认情况下,HotSpot会从Object.hashCode()
返回随机数,请参阅Source code。