在做国际化项目的时候,碰到一个问题,
比如:JButton b=new JButton(“Search”);
JButton b1=new JButton("Stop");
然后给这两个button注册监听器,
其中的actionperformed方法是这样的
public void actionPerformed(ActionEvent e) { if(e.getActionCommand()==“Search”) { disposeFrame(); } else if(e.getActionCommand()=="Stop") { createTextView(); } }
然后运行,没有问题。为什么没有问题呢,不是java对象不能==来判发布帖子断值是否相等的吗?
这是由于虚拟机有一个Java-String常量池来存放一些字符串常量 比如上面用到的Search和Stop都是被存储于该区域来提升程序性能,当执行e.getActionCommand()==“Search”或者e.getActionCommand()=="Stop"的时候,等好两边找到的字符串对象是常量池里面的同一个,所以没有问题,注意 这里==两边变量是同一个。
但是当我做国际化 替换到==右边的字符串时,问题就出来了,一般来说,右边被替换成的字符串极有可能不是同一个对象了 ,可能是用new String(“查询”)产生的,因此,这个判断的等式永远不可能成立。地雷爆炸了。
这个bug很难发现。
0 评论 :
发表评论