java Integer与int详解 01

心得:
一周前和一位刚入职阿里蚂蚁金融的学长进行了一次会谈:总的来说,java学了一个学期,可能是急于求成(我身上最大的缺陷),就直接学JAVA的JDBC编程(MYSQL在大二上学期就开始在用了:2002 1064 HY2000 1042 2053等的错踩到心碎,不过踩坑不怕,重要的是你对MYSQL认识了多少,现在一般也是偷懒,很少写.sql建表啊等等操作,哈哈哈都是视图工具Navcat for mysql:需要的同学可以了解一下)
我清晰的记得我在学java第二天学的多线程,做了一个买面包的多线程小demo,说实话,现在已经忘的一干二净,可能唯一记住的就是sleep()函数了...个人心得:不管学什么,都得循序渐进
学长在“会谈”一直在强调基础,那么java基础是什么呢?一门语言的基础永远不会是老师讲的那些:类的访问权限、包的访问权限,static是一个类静态变量、怎么使用import啊等等肤浅到学了和没学一样的东西(可能是王某愚见....),学长考了我一道题:

   Integer a=200;
   Integer b=200;
   Integer a1=2;
   Integer b1=2;
   System.out.println(a==b); //false   1
   System.out.println(a1==b1); //true  2


我再加一个:   

1   Integer c=new Integer(200);
2   Integer d=new Integer(200);
3   System.out.println(c==d); //false    3


很简单:我很快就说出了正确答案,但学长的问题来了:
  1.Integer对象和int数据类型的区别是什么?
  2.既然知道缓存,那么缓存到了哪里?为什么缓存?Integer、int的适用场景分别是什么?
  3.System.out.println(a.equals(b)); //true 为什么? integer既然继承自Object,那么你能说一下Object都有什么方法吗?
  4.不同类型的equals()方法是相同的吗?


  问题一:
   Integer 是int的包装类,在Integer对象里边包装了一个int基本类型的值(具体为:private final int value),
并且Integer也提供了很多供我们使用的方法:
   我们从构造函数说起:
   1>.向构造函数传int值
  

public Integer(int value) {
        this.value = value;
    }


   也就是说,Integer c=new Integer(200);这一行相当于是Integer对象里面的私有属性value的赋值
  2>向构造函数传String字符串

 1 public Integer(String s) throws NumberFormatException {
 2         this.value = parseInt(s, 10); //10为进制
 3     }
 4     public static int parseInt(String s, int radix)
 5                 throws NumberFormatException   //数字格式异常
 6     {
 7 
 8         if (s == null) {
 9             throw new NumberFormatException("null");
10         }
11 
12         if (radix < Character.MIN_RADIX) { //java.lang.Character了解多少
13             throw new NumberFormatException("radix " + radix +
14                                             " less than Character.MIN_RADIX");
15         }
16 
17         if (radix > Character.MAX_RADIX) {
18             throw new NumberFormatException("radix " + radix +
19                                             " greater than Character.MAX_RADIX");
20         }
21 
22         int result = 0;
23         boolean negative = false;
24         int i = 0, len = s.length();
25         int limit = -Integer.MAX_VALUE;   //@Native public static final int MAX_VALUE = 0x7fffffff; @Native 了解多少?
26         int multmin;
27         int digit;
28 
29         if (len > 0) { //不为空
30             char firstChar = s.charAt(0); //String类的操作方法了解多少,符号位的判断
31             if (firstChar < '0') { // Possible leading "+" or "-"   '-'<'0'&&'+'<'0' true  ASCLL码的比较  ‘1’<'0' 数据类型的自动转化 (String)‘1’=》(int)1 
 32                 if (firstChar == '-') {
33                     negative = true;  //是一个负数
34                     limit = Integer.MIN_VALUE;
35                 } else if (firstChar != '+')
36                     throw NumberFormatException.forInputString(s);
37 
38                 if (len == 1) // Cannot have lone "+" or "-"
39                     throw NumberFormatException.forInputString(s);
40                 i++; 
41             }
42             multmin = limit / radix; //???
43             while (i < len) {
44                 // Accumulating negatively avoids surprises near MAX_VALUE
45                 digit = Character.digit(s.charAt(i++),radix);  //java.lang.Character.digit()方法用法 : 在指定的基数(radix)返回字符ch的数值 //Character.digit('0',10)=0; Character.digit('a',10);=-1
46                 if (digit < 0) {
47                     throw NumberFormatException.forInputString(s);
48                 }
49                 if (result < multmin) {
50                     throw NumberFormatException.forInputString(s);
51                 }
52                 result *= radix; //数值进位制的变化
53                 if (result < limit + digit) {  //结果如果小于所能表示的最小值
54                     throw NumberFormatException.forInputString(s);
55                 }
56                 result -= digit;
57             }
58         } else {
59             throw NumberFormatException.forInputString(s);
60         }
61         return negative ? result : -result;
62     }



   
 



    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }



  接下来我将对我能理解的Integer源码进行解读:
   public final class Integer extends Number implements Comparable<Integer> {}
   //Integer 的类声明,第一句就要注意三个点:Number类了解多少?Comparable<>泛型接口了解多少?CompareTo()函数的实现原则?

   

猜你喜欢

转载自www.cnblogs.com/laiso/p/9256120.html