Redian新闻
>
为什么不能直接比较java hashMap get 的值?
avatar
为什么不能直接比较java hashMap get 的值?# JobHunting - 待字闺中
f*e
1
如果把值打印出来,明明就相等, 为啥这个if statement 就是true?
if(s_map.containsKey(s_char) && (s_map.get(s_char) != t_map.get(
t_char)))
{
System.out.println(s_map.get(s_char) != t_map.get(t_char));
System.out.println("i = " + i + ", s_map.get(s_char) = " + s
_map.get(s_char) + " , t_map.get(t_char) = " + t_map.get(t_char));
return false;
}
----------------------------output-------------
true
i = 223, s_map.get(s_char) = 128 , t_map.get(t_char) = 128
avatar
g*g
2
println is calling toString and compare is calling equals, check equals to
see why it's different.

get(
s

【在 f********e 的大作中提到】
: 如果把值打印出来,明明就相等, 为啥这个if statement 就是true?
: if(s_map.containsKey(s_char) && (s_map.get(s_char) != t_map.get(
: t_char)))
: {
: System.out.println(s_map.get(s_char) != t_map.get(t_char));
: System.out.println("i = " + i + ", s_map.get(s_char) = " + s
: _map.get(s_char) + " , t_map.get(t_char) = " + t_map.get(t_char));
: return false;
: }
: ----------------------------output-------------

avatar
f*e
3
原来如此。谢了

【在 g*****g 的大作中提到】
: println is calling toString and compare is calling equals, check equals to
: see why it's different.
:
: get(
: s

avatar
w*z
4
Java 里 != 是比较 memory reference. 如果你用 != 在 object 上, 99.99%的情况
下,你用错了。应该用equals.

get(
s

【在 f********e 的大作中提到】
: 如果把值打印出来,明明就相等, 为啥这个if statement 就是true?
: if(s_map.containsKey(s_char) && (s_map.get(s_char) != t_map.get(
: t_char)))
: {
: System.out.println(s_map.get(s_char) != t_map.get(t_char));
: System.out.println("i = " + i + ", s_map.get(s_char) = " + s
: _map.get(s_char) + " , t_map.get(t_char) = " + t_map.get(t_char));
: return false;
: }
: ----------------------------output-------------

avatar
S*n
5
你的map 是 HashMap
Integer 和 int是不一样的
map.get(s_char) == 128 // true 正确写法
map.get(s_char).equals(map.get(t_char)) // true, 正确写法
map.get(s_char) == map.get(t_char) // 有时候true,有时候false;错误写法

get(
s

【在 f********e 的大作中提到】
: 如果把值打印出来,明明就相等, 为啥这个if statement 就是true?
: if(s_map.containsKey(s_char) && (s_map.get(s_char) != t_map.get(
: t_char)))
: {
: System.out.println(s_map.get(s_char) != t_map.get(t_char));
: System.out.println("i = " + i + ", s_map.get(s_char) = " + s
: _map.get(s_char) + " , t_map.get(t_char) = " + t_map.get(t_char));
: return false;
: }
: ----------------------------output-------------

avatar
P*r
6
2楼不对,== 的 比较不调 equals。
5楼是对的,HashMap里面必然是用Integer而不是int。所以用==可能会有问题
avatar
g*e
7
Integer 是对象,下面比较的是两个对象的reference address, 是不同的。
map.get(s_char) != map.get(t_char)
println 会invoke Integer 对象 toString() method,
toString() return a String object representing this Integer's value
所以打印的值是相同的。

【在 S**********n 的大作中提到】
: 你的map 是 HashMap
: Integer 和 int是不一样的
: map.get(s_char) == 128 // true 正确写法
: map.get(s_char).equals(map.get(t_char)) // true, 正确写法
: map.get(s_char) == map.get(t_char) // 有时候true,有时候false;错误写法
:
: get(
: s

avatar
f*e
8
嗯, 谢谢。
是Integer, 不是int.被java 的auto boxing 彻底搞晕了。

【在 g*******e 的大作中提到】
: Integer 是对象,下面比较的是两个对象的reference address, 是不同的。
: map.get(s_char) != map.get(t_char)
: println 会invoke Integer 对象 toString() method,
: toString() return a String object representing this Integer's value
: 所以打印的值是相同的。

avatar
i*h
9
楼上的答案都是错的,建议楼主去看看基础
avatar
z*e
10

下面的输出结果是什么?
int a = 3, b = 3;
Integer aa = new Integer(3), bb = new Integer(3);
Integer cc = aa;
System.out.println(a==b);
System.out.println(aa==bb);
System.out.println(aa==cc);
System.out.println(aa.equals(bb));
System.out.println(aa.equals(cc));
System.out.println(aa.equals(a));
System.out.println(aa==a);

【在 f********e 的大作中提到】
: 嗯, 谢谢。
: 是Integer, 不是int.被java 的auto boxing 彻底搞晕了。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。