Java 不同地方的死代码
Java dead code in different places
对不起,如果我问了一个愚蠢的问题,好久没有练习 Java......
我写了一些代码来模拟哈希Table。
这是我的代码的一个功能:
protected int find(K key){
int avail=-1;
int i=hashValue(key);
int j=i;
do{
Entry<K, V> element = bucket[i];
if(element==null){
if(avail<0){
avail=i;
}
break;
}
if(key.equals(element.getK())){
return i; // found
}
if(element==this.used){
if(avail<0){
avail=i;
}
}
i=(i+1)%capa;
}while(i!=j);
return -(avail+1); // return a hash address
}
奇怪的是,当我将 if 语句 if(element==null) 改回一点点(除结构开头以外的任何地方)时,它会警告我这是一个死代码:
protected int find(K key){
int avail=-1;
int i=hashValue(key);
int j=i;
do{
Entry<K, V> element = bucket[i];
if(key.equals(element.getK())){
return i; // found
}
if(element==this.used){
if(avail<0){
avail=i;
}
}
// dead code then
if(element==null){
if(avail<0){
avail=i;
}
break;
}
//dead code then
i=(i+1)%capa;
}while(i!=j);
return -(avail+1); // return a hash address
}
有谁知道哪里出了问题吗?
在你的第二个代码示例中,element
不可能是 null
因为你已经在上面的行中引用了它:element.getK()
in line
if(key.equals(element.getK()))
如果当时是 null
,那么您会得到一个 NullPointerException
,但您没有听清。这意味着该方法不会继续到您的 if(element == null)
语句。
如果 element
不是 null
,那么你的 if
语句的主体也不会被执行。
对不起,如果我问了一个愚蠢的问题,好久没有练习 Java...... 我写了一些代码来模拟哈希Table。 这是我的代码的一个功能:
protected int find(K key){
int avail=-1;
int i=hashValue(key);
int j=i;
do{
Entry<K, V> element = bucket[i];
if(element==null){
if(avail<0){
avail=i;
}
break;
}
if(key.equals(element.getK())){
return i; // found
}
if(element==this.used){
if(avail<0){
avail=i;
}
}
i=(i+1)%capa;
}while(i!=j);
return -(avail+1); // return a hash address
}
奇怪的是,当我将 if 语句 if(element==null) 改回一点点(除结构开头以外的任何地方)时,它会警告我这是一个死代码:
protected int find(K key){
int avail=-1;
int i=hashValue(key);
int j=i;
do{
Entry<K, V> element = bucket[i];
if(key.equals(element.getK())){
return i; // found
}
if(element==this.used){
if(avail<0){
avail=i;
}
}
// dead code then
if(element==null){
if(avail<0){
avail=i;
}
break;
}
//dead code then
i=(i+1)%capa;
}while(i!=j);
return -(avail+1); // return a hash address
}
有谁知道哪里出了问题吗?
在你的第二个代码示例中,element
不可能是 null
因为你已经在上面的行中引用了它:element.getK()
in line
if(key.equals(element.getK()))
如果当时是 null
,那么您会得到一个 NullPointerException
,但您没有听清。这意味着该方法不会继续到您的 if(element == null)
语句。
如果 element
不是 null
,那么你的 if
语句的主体也不会被执行。