.代码中尽量少出现"123".equals(str)这样的危险字符,而要public static final StringSTR = "123"; STR.equals(str)去代替.
求解释

解决方案 »

  1.   

    把 "123".equals(str) 称为危险字符有点言之过重了吧。
    public static final String STR = "123"; STR.equals(str)这样只是方便以后如果123换成了456不用逐个去找123,直接修改public static final String STR = "456"就行,这样提高效率。  
      

  2.   

    如果你写的只是个小程序,这样当然没什么影响。
    如果系统代码几K,几十K,甚至成千上百K,那么这样写肯定是危险的俄
      

  3.   

    比如 你有恨多地方都需要喝123比较 
    如果用static final你只需要修改1个地方
    如果很多地方都用"123".equels("XX")就需要分别修改。这样做的结果就是很容易漏改,或改错
      

  4.   

    统一在一个地方对定义,供多处使用,如果你确认你会永久一看到这代码就可以明白"123".equals(str)中的数字什么是什么意思,同时你也能确保"123"以后永久不会改变,这样就无危险可严.说其危险只是夸张了下,是要引起程序员的注意
      

  5.   

    我想是这样吧,str可能是null,这个时候就是“123”.equals(null),这样就要出问题。其实可以把"123".equals(str)改成null!=str&&"123".equals(str)
      

  6.   

    这个……
    "123".equals(str)

    str.equals("123")
    安全多了……危险谈不上
    可读性,维护性欠佳而已
      

  7.   

    这种代码里直接出现的数字或字符串,叫“魔鬼数字”或“魔鬼变量”
    给你具个例子,通讯项目代码里经常要用"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。