f********e 发帖数: 100 | 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 | g*****g 发帖数: 34805 | 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-------------
| f********e 发帖数: 100 | 3 原来如此。谢了
【在 g*****g 的大作中提到】 : println is calling toString and compare is calling equals, check equals to : see why it's different. : : get( : s
| w**z 发帖数: 8232 | 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-------------
| S**********n 发帖数: 250 | 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-------------
| P******r 发帖数: 1342 | 6 2楼不对,== 的 比较不调 equals。
5楼是对的,HashMap里面必然是用Integer而不是int。所以用==可能会有问题 | g*******e 发帖数: 107 | 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
| f********e 发帖数: 100 | 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 : 所以打印的值是相同的。
| i*****h 发帖数: 1534 | | z****e 发帖数: 54598 | 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 彻底搞晕了。
|
|