java学习中的小问题(Integer、String)

来源:互联网 发布:c语言间接寻址 编辑:程序博客网 时间:2024/06/06 09:22

Integer in1 = 127;Integer in2 = 127;Integer in3 = 128;Integer in4 = 128;System.out.println(in1==in2);   // 执行结果trueSystem.out.println(in3==in4);  // 执行结果false
为什么会出现这种情况呢, 所以我就追究了一下源码,结果发现,其实Integer in1 = 127;类似这样的形式其实是在jdk1.5之后出现的,其实是相当于Integer in1 = Integer.valueOf(127);,那么我们来看看valueOf的源码,结果代码是这样的,
 public static Integer valueOf(int i) {        assert IntegerCache.high >= 127;        if (i >= IntegerCache.low && i <= IntegerCache.high)            return IntegerCache.cache[i + (-IntegerCache.low)];        return new Integer(i);    }

那么就很显然的说说明了结果。

另外一个就是String方法中的compareTo方法

我们先举一个例子

String s1 = "good";String s2 = "Good";int n = s1.compareTo(s2);System.out.println(n);  //会打印出32

那么为什么会出现这种情况呢,那么我们同样来看看compareTo的源码

   public int compareTo(String anotherString) {        int len1 = value.length;        int len2 = anotherString.value.length;        int lim = Math.min(len1, len2);        char v1[] = value;        char v2[] = anotherString.value;        int k = 0;        while (k < lim) {            char c1 = v1[k];            char c2 = v2[k];            if (c1 != c2) {                return c1 - c2;   // 这里可以很明显看到是Unicode编码做减法            }            k++;        }        return len1 - len2;    }

所以显示出了32,这个问题也就迎刃而解了




阅读全文
1 0