<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 104,  comments - 34,  trackbacks - 0

    1 )原代碼如下:

    protected String[] a = null;

    public void test(String[] str){

        this.a = str;

    }

    findbugs描述為:

    This code stores a reference to an externally mutable object into the internal representation of the object. If instances are accessed by untrusted code, and unchecked changes to the mutable object would compromise security or other important properties, you will need to do something different. Storing a copy of the object is better approach in many situations.

    網(wǎng)上翻譯如下:

    可能因使引用可指向多個對象而暴露內(nèi)部存儲結(jié)構(gòu)。
    這代碼使一個指向外部多個對象的引用指向了一個內(nèi)部對象存儲地址。
    如果實例被未被信任代碼訪問或多個對象發(fā)生了未經(jīng)檢查的改變就會危及安全性或其它重要屬性,
    你需要去做一些不同的事情。存儲一個對象的拷貝在許多情況下會是一個更好的方法。

    修改如下:

    public void test(String[] str){

     

        if(str!=null)

        this.a = str.clone();

    }

    --------------------------------------------------------------------------------

    2 )在bean中定義數(shù)組類型的bug

    [參考]http://topic.csdn.net/u/20080115/20/c8893ce0-5546-4762-97bb-9b00d10885cc.html

    原代碼:

    private String[] name;

    public String[] getName() {
    return name;
    }

    public void setName(String[] name) {
    this.name = name;
    }

    bug描述:

    [EI] May expose internal representation by returning reference to mutable object [EI_EXPOSE_REP]

    解決:

    private String[] name;

    public String[] getName() {
    String[] temp = name;
    return temp;
    }

    public void setName(String[] name) {
    String[] temp = name;
    this.name = temp;
    }

    說明:

        所有容器類型如ArrayList和數(shù)組類型,如果你都自動生成get set,都會有這個警告。
        這個警告的主要目的是:一般的get set直接把此對象中某一容器的引用放到外部,可以隨便更改,違反了封裝的原則,至于那個temp的方法,由于不是直接對內(nèi)部容器進(jìn)行操作,故沒有警告,但沒有實際意義,自己知道即可。

     

    Returning a reference to a mutable object value stored in one of the object's fields exposes the internal representation of the object. If instances are accessed by untrusted code, and unchecked changes to the mutable object would compromise security or other important properties, you will need to do something different. Returning a new copy of the object is better approach in many situations.

    --------------------------------------------------------------------------------

    3) 序列化問題

    源碼:

    private Obj[] obj;

    public void getObj(){

    Obj[] tep = obj;

    return tep;

    }

    public Obj[] setObj(Obj[] o){

    Obj[] tep = o;

    this.obj = tep;

    }

    bug描述:

    This Serializable class defines a non-primitive instance field which is neither transient, Serializable, or java.lang.Object, and does not appear to implement the Externalizable interface or the readObject() and writeObject() methods. Objects of this class will not be deserialized correctly if a non-Serializable object is stored in this field.

    修改:

    public class Obj implements Serializable {

    ...

    }

     

    4 ) new Integer(int) 和 Integer.valueOf(int)  

    bug描述:

    [Bx] Method invokes inefficient Number constructor; use static valueOf instead [DM_NUMBER_CTOR]

    Using new Integer(int) is guaranteed to always result in a new object whereas Integer.valueOf(int) allows caching of values to be done by the compiler, class library, or JVM. Using of cached values avoids object allocation and the code will be faster.

    說明:

    [參考]http://www.cnblogs.com/hyddd/articles/1391318.html

    FindBugs推薦使用Integer.ValueOf(int)代替new Integer(int),因為這樣可以提高性能。如果當(dāng)你的int值介于-128~127時,Integer.ValueOf(int)的效率比Integer(int)快大約3.5倍。

    下面看看JDK的源碼,看看到Integer.ValueOf(int)里面做了什么優(yōu)化:

    public static Integer valueOf(int i) {
      
    final int offset = 128;
      
    if (i >= -128 && i <= 127) { // must cache
        return IntegerCache.cache[i + offset];
       }
      
    return new Integer(i);
    }



    private static class IntegerCache {
      
    private IntegerCache(){}
        
      
    static final Integer cache[] = new Integer[-(-128) + 127 + 1];
      
    static {
      
    for(int i = 0; i < cache.length; i++)
          cache
    = new Integer(i - 128);
       }
    }

    從源代碼可以知道,ValueOf對-128~127這256個值做了緩存(IntegerCache),如果int值的范圍是:-128~127,在ValueOf(int)時,他會直接返回IntegerCache的緩存給你。

     

    所以你會看到這樣的一個現(xiàn)象:

    public static void main(String []args) {
          Integer a
    = 100;
          Integer b
    = 100;
          System.out.println(a
    ==b);

          Integer c
    = new Integer(100);
          Integer d
    = new Integer(100);
          System.out.println(c
    ==d);
    }

    結(jié)果是:

    true
    false

    因為:java在編譯的時候 Integer a = 100; 被翻譯成-> Integer a = Integer.valueOf(100);,所以a和b得到都是一個Cache對象,并且是同一個!而c和d是新創(chuàng)建的兩個不同的對象,所以c自然不等于d。

     

    再看看這段代碼:

     

    public static void main(String args[]) throws Exception{
             Integer a
    = 100;
             Integer b
    = a;
             a
    = a + 1;  //或者a++;
             System.out.println(a
    ==b);
    }

    結(jié)果是:false

     

    因為在對a操作時(a=a+1或者a++),a重新創(chuàng)建了一個對象,而b對應(yīng)的還是緩存里的100,所以輸出的結(jié)果為false。

    --------------------------------------------------------------------------------

    5) toString() 和 String

    源碼:

    return a.toString();

    bug描述

    [Dm] Method invokes toString() method on a String [DM_STRING_TOSTRING]
    Calling String.toString() is just a redundant operation. Just use the String.

    修改為:

    return (String) a;

    ***************************************************************************

    未解決bug

    1、

    [DMI] Code contains a hard coded reference to an absolute pathname [DMI_HARDCODED_ABSOLUTE_FILENAME]

    This code constructs a File object using a hard coded to an absolute pathname (e.g., new File("/home/dannyc/workspace/j2ee/src/share/com/sun/enterprise/deployment");

    posted on 2009-09-30 11:22 末日風(fēng)情 閱讀(5546) 評論(0)  編輯  收藏 所屬分類: java編程
    <2009年9月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲中文字幕久久精品无码喷水| 无码av免费网站| WWW亚洲色大成网络.COM| 亚洲熟女综合色一区二区三区| 亚洲国产精品久久网午夜| 亚洲成aⅴ人片在线观| 亚洲成人免费网址| 亚洲一区二区三区四区视频| 日韩在线不卡免费视频一区| 在线看片免费人成视频播| 免费无码H肉动漫在线观看麻豆| 中文在线免费观看| a级毛片高清免费视频就| 免费播放在线日本感人片| 久久精品视频免费播放| 日本h在线精品免费观看| 免费可以看黄的视频s色| 成人免费无码视频在线网站| 在线播放高清国语自产拍免费| 国产禁女女网站免费看| 亚洲乱码日产精品a级毛片久久| 久久久久久亚洲精品不卡| 国产亚洲精品va在线| 亚洲黄色片免费看| 中文文字幕文字幕亚洲色| 亚洲国产AV无码一区二区三区 | 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久草免费福利在线| 久久aⅴ免费观看| 国产成人免费在线| 国产美女无遮挡免费网站| 亚洲午夜AV无码专区在线播放| 亚洲日韩一页精品发布| 亚洲综合男人的天堂色婷婷| 亚洲综合无码一区二区痴汉| 日韩在线视频线视频免费网站| 大地资源中文在线观看免费版| 免费国产成人高清在线观看网站| 亚洲一线产品二线产品| 免费播放国产性色生活片| 亚洲视频免费观看|