Java 我在IDEA的调试器中发现一个错误
我有一个名为SNMPv3的类,如下所示。当我试图从这个类的实例调用函数mergeParameters时,会发生一些奇怪的事情Java 我在IDEA的调试器中发现一个错误,java,intellij-idea,Java,Intellij Idea,我有一个名为SNMPv3的类,如下所示。当我试图从这个类的实例调用函数mergeParameters时,会发生一些奇怪的事情 class SNMPv3{ String[] names={"value1", "value2", "value3", "value4", "value5", "va
class SNMPv3{
String[] names={"value1",
"value2",
"value3",
"value4",
"value5",
"value6"};
Map<String,String> map = new HashMap<String,String>();
void mergeParameters(ArrayList<SNMPv3> snmpv3List)
{
for(String parametername : this.map.keySet())
{
String parametervalue="";
for(SNMPv3 row : snmpv3List)
{
if(!row.equals(this))
{
if(parametervalue.equals(""))
{
parametervalue = row.map.get(parametername);
}
else if(parametervalue.equals(row.map.get(parametername)))
{
this.map.put(parametername, "");
for(SNMPv3 rowinside : snmpv3List)
{
if(!rowinside.equals(this))
{
this.map.put(parametername,this.map.get(parametername) + rowinside.map.get(parametername));
}
}
}
}
}
}
}
}
它应该转到下一个循环,但它没有。奇怪的是,它是这样的:
this.map.put(parametername,this.map.get(parametername) + rowinside.map.get(parametername));
if (!row.equals(this))
我不明白为什么?顺便说一句,我已经检查了花括号
然后,我尝试在这个奇怪的问题上添加一个else,如果:
class SNMPv3{
String[] names={"value1",
"value2",
"value3",
"value4",
"value5",
"value6"};
Map<String,String> map = new HashMap<String,String>();
void mergeParameters(ArrayList<SNMPv3> snmpv3List)
{
for(String parametername : this.map.keySet())
{
String parametervalue="";
for(SNMPv3 row : snmpv3List)
{
if(!row.equals(this))
{
if(parametervalue.equals(""))
{
parametervalue = row.map.get(parametername);
}
else if(parametervalue.equals(row.map.get(parametername)))
{
this.map.put(parametername, "");
for(SNMPv3 rowinside : snmpv3List)
{
if(!rowinside.equals(this))
{
this.map.put(parametername,this.map.get(parametername) + rowinside.map.get(parametername));
}
}
}
}
else{
System.out.println("Isnt it strange?");
}
}
}
}
}
那么它工作起来就很正常了。有人能解释一下这到底是为什么吗?我认为这句话的意思是:
this.map.put(parametername,this.map.get(parametername) + rowinside.map.get(parametername));
if (!row.equals(this))
如果您正在比较两个尚未实现equals方法的对象,这可能会导致一些奇怪的行为
Override方法等于from,用于指定两个SNMPv3何时被替换。标题的粗体语句。当“row”和“this”显示相同的对象时,编译器进入这一行时,您应该使用标题来描述问题,而不是在编译时描述问题——在编译时,row没有值;这只是一个变量。因此,你的问题很难理解。你能发布一个简短但完整的程序来演示这个问题吗?去掉任何不相关的东西,确保我们可以编译并运行它,而不需要其他任何东西。这对我们来说是一大堆需要调试的混乱代码。你能提供一个小的例子来展示这个所谓的bug吗?你可能还没有为你的类实现equals方法,所以使用了of Object。如果两者都是相同的引用,则只返回true。如果不知道mergeParameters是如何调用的,以及使用什么,我们就无法确定。顺便说一句:在您自己的代码中,它几乎总是一个愚蠢的bug。在某些第三方库中经常出现bug。不是很常见,标准库中有一个bug。编译器中很少出现bug。非常罕见,运行时系统中有一个bug。顺便问一下,你的equals方法是什么?我的第一个URL是404