我只是想知道为什么Java 7 switch语句不支持一个null案例而是抛出NullPointerException?请参阅下面的注释行(示例摘自Java Tutorials文章switch):
{
String month = null;
switch (month) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
//case null:
default:
monthNumber = 0;
break;
}
return monthNumber;
}
Run Code Online (Sandbox Code Playgroud)
这样可以避免if在每次switch使用之前进行空检查的条件.
我知道这似乎已经讨论过,答案是肯定的,String.hashCode可以为不同的字符串生成相同的值,但是不太可能(Java的hashCode可以为不同的字符串生成相同的值吗?).但它确实发生在我的应用程序中.
以下代码将生成相同的哈希码:-347019262(jave 1.7.25)
String string1 = "/m/06qw_";
String string2="/m/0859_";
System.out.println(string1+","+string1.hashCode());
System.out.println(string2+","+string2.hashCode());
Run Code Online (Sandbox Code Playgroud)
在这种情况下我确实需要哈希码,我想用它来为字符串生成唯一的主键.看来我做得不对.有什么建议吗?
非常感谢!
与面试官讨论了Java Hashmaps的内部实现,以及如果我们覆盖equals()而不是Employee对象的HashCode()方法,它将如何表现.
他告诉我,对于默认的object.hashCode()实现,两个不同对象的hashCode永远不会相同,除非我们自己覆盖hashCode().
另外,有人告诉我,一个存储桶中只能有一个唯一的Hashcode,而具有相同哈希码的对象只能存储在一个存储桶中.我知道这与第一点相矛盾.咄!
根据我的记忆,我告诉他Java Hashcode合同说两个不同的对象可能有相同的hashcode().
根据我的采访者的说法,默认的object.hashcode()永远不会有两个不同对象的相同hashcode(),这是真的吗?
甚至可以编写一个演示此代码的代码.根据我的理解,Object.hashcode()可以产生2 ^ 30个唯一值,如何产生碰撞,具有如此低的碰撞可能性,以证明两个不同的对象可以使用Object类方法获得相同的hashcode().
或者他是对的,使用默认的Object.HashCode()实现,我们永远不会发生冲突,即两个不同的对象永远不会有相同的HashCode.如果是这样,为什么这么多java手册没有明确说明.
如何编写一些代码来演示这个?因为在演示这个时,我还可以证明hashmap中的一个桶可以包含不同的HashCodes(我试图向他展示hashMap被扩展的调试器,但他告诉我这只是逻辑实现而不是内部算法?)
我有短Strings(少于10个字符).我将其转换为int并将其用作主键.(由于小问题,我不能使用String主键.)我知道无限长度的字符串的哈希码可以冲突,但是短字符串也可以冲突吗?