Java Swing中table.getValueAt的if条件判断失效问题求助
问题根源与解决方案
你遇到的这个问题其实是Java里非常常见的字符串比较误区——你用了==来比较字符串内容,但==在Java中比较的是对象的内存地址,而不是字符串的实际内容。
为什么会这样?
虽然控制台能正常打印出mashkull,但从table.getValueAt(0,2)获取到的字符串对象,和你代码里写的字面量"mashkull",可能并不是同一个内存地址的对象。==只会判断两个对象是不是同一个引用,而不管内容是否相同,所以你的if条件永远匹配失败,直接走到else分支。
修复后的代码
把所有的==替换成equals()方法,同时为了避免空指针异常,建议用字符串字面量来调用equals()(这样就算单元格值为null也不会报错):
String cellValue = String.valueOf(table.getValueAt(0, 2)); String newWord; System.out.println(cellValue); if ("mashkull".equals(cellValue)) { newWord = "male"; } else if ("femer".equals(cellValue)) { newWord = "female"; } else { newWord = "other"; } table.setValueAt(newWord, 0, 2);
补充说明
关于getValueAt()的细节:它返回的是Object类型,你之前尝试强制转成String或者用String.valueOf()是正确的操作,但这不是问题的核心——核心还是比较方式错误。只要把比较逻辑改成equals(),问题就能解决。
另外,如果需要忽略大小写比较,可以用equalsIgnoreCase()方法,比如"mashkull".equalsIgnoreCase(cellValue)。
内容的提问来源于stack exchange,提问作者Albos Hajdari
相关产品推荐
相关产品推荐

