为什么代码中尽量少出现"123".equals(str)这样的危险字符???
.代码中尽量少出现"123".equals(str)这样的危险字符,而要public static final StringSTR = "123"; STR.equals(str)去代替.
求解释
------解决方案--------------------如果你写的只是个小程序,这样当然没什么影响。
如果系统代码几K,几十K,甚至成千上百K,那么这样写肯定是危险的俄
------解决方案--------------------比如 你有恨多地方都需要喝123比较
如果用static final你只需要修改1个地方
如果很多地方都用"123".equels("XX")就需要分别修改。这样做的结果就是很容易漏改,或改错
------解决方案--------------------统一在一个地方对定义,供多处使用,如果你确认你会永久一看到这代码就可以明白"123".equals(str)中的数字什么是什么意思,同时你也能确保"123"以后永久不会改变,这样就无危险可严。。。.说其危险只是夸张了下,是要引起程序员的注意
------解决方案--------------------这种称为“魔法常量”,也就是说莫名其妙地一个字面常量,让人不知道这是干嘛的,为什么要用这个。
------解决方案--------------------这种代码里直接出现的数字或字符串,叫“魔鬼数字”或“魔鬼变量”
给你具个例子,通讯项目代码里经常要用"WCDMA",代码里可能成百上千处需要,
如果都直接写"WCDMA",
1)某处不小心写错了,编译器不会提醒你的;而定义了一个常量,各处使用,肯定不会错
2)某天为了规范,要改为"UMTS",要不一个个改,要不全部替换,都是又费神又有危险的操作;而定义了一个常量,只需修改这一处即可。
PS:ls sunyiz兄说的很好,字符串与常量比较时,str.equals("123")前面一定要先判断str是否为null:(null != str)&&(str.equals("123"),而为null的判断经常会忘掉的;"123".equals(str)
就没问题了,即使str为null也正常判断为false。