比如i=256
怎么比较得到修饰符为 public static native
我看不懂源代码,主要对0x00000001这些个数字不理解

解决方案 »

  1.   

    每个数字位都对应特殊意思。它的toString已经很清楚啊
        public static String toString(int mod) {
    StringBuffer sb = new StringBuffer();
    int len; if ((mod & PUBLIC) != 0) sb.append("public ");
    if ((mod & PROTECTED) != 0) sb.append("protected ");
    if ((mod & PRIVATE) != 0) sb.append("private "); /* Canonical order */
    if ((mod & ABSTRACT) != 0) sb.append("abstract ");
    if ((mod & STATIC) != 0) sb.append("static ");
    if ((mod & FINAL) != 0) sb.append("final ");
    if ((mod & TRANSIENT) != 0) sb.append("transient ");
    if ((mod & VOLATILE) != 0) sb.append("volatile ");
    if ((mod & SYNCHRONIZED) != 0) sb.append("synchronized ");
    if ((mod & NATIVE) != 0) sb.append("native ");
    if ((mod & STRICT) != 0) sb.append("strictfp ");
    if ((mod & INTERFACE) != 0) sb.append("interface "); if ((len = sb.length()) > 0) /* trim trailing space */
        return sb.toString().substring(0, len-1);
    return "";
        }它是按位与操作的
      

  2.   

    就是这个位与操作弄不清楚,是多少进制的
    比如 上面代码中mod=265   PUBLIC=0x00000001  PRIVATE=0x00000002 。。
    计算的就是 265&0x00000001   265&0x00000002
    就是想知道要把265转化成什么进制
      

  3.   

    当然是二进制,因为&操作比较的就是二进制。
    256 & 0x00001  就是 二进制的 100 & 1 == 0 ,所以它不是public的
    256 & PRIVATE → 100 & 2 == 0,也不是private的256 & NATIVE → 100 & 100 == 100,说明它代表native
    这样就是Java中最基本的按位与而已。
      

  4.   

    每一个二进制位表示一个意思,可以组合成很多种形式,这是一种很实用的技巧,呵呵。使用 (num & op) != 0 可以判断是否具有这一二进制位的值。