心得:
一周前和一位刚入职阿里蚂蚁金融的学长进行了一次会谈:总的来说,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()函数的实现原则?