网上看了些java装箱与拆箱,根据自己理解写一些感悟,本人是菜鸟作品,大神勿进
自动拆装箱为java5以后的功能,主要作用为8种基础数据类型进行拆装箱。
例1:Integer的拆装箱
1)装箱
Integer b=1;
int b=1;
两种方式的区别,1是对象的初始化,可以有 b.method 第二种则没有方法可使用
Integer b=1;其实为 Integer b=Integer.valueOf(1);由java自动实现了装箱操作。 其实我还是没看懂,所以我看了下valueOf的源码,如下
心路历程完成,再看看String的public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }大致上说在-128~127之间,直接用缓存,否则new Integer,这倒是解决了另一个问题
Integer a=100; Integer b=100; System.out.print(a==b)//true
Integer a=200; Integer b=200;System.out.print(a==b)//false
(==与equals区别:==为存储位置比较,equals为值比较)
其实我还是没搞懂Integer i=new Integer(1)与Integer i=Integer.valueOf(1)的区别,查了一下网上有人说valueOf效率高,哦对,valueOf在-128~127之间动用了缓存机制,不在此范围则new,果然如此。
途中看了一个int 与Integer的使用示例:当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装 object的,这是就需要这些内建类型的外覆类。2)拆箱
网上说的是Integer i=100;
int j=i;//相当于执行了j=i.valueOf();
老实说没看懂,所以呢老老实实的查看了一下valueOf()的源码,如下
/** * Returns the value of this {@code Integer} as an * {@code int}. */ public int intValue() { return value; }为什么用valueOf这个方法而不用别的呢?去查api看Integer,首先既然int=Integer,那么此方法肯定是返回int型,看了一下所有方法,符合此条件的只有valueOf,再返回来看源码,就一目了然了。
2.照理,先看一段网上代码
String str1 ="abc";
String str2 ="abc";
System.out.println(str2==str1); //输出为 true
System.out.println(str2.equals(str1)); //输出为 true
String str3 =new String("abc");
String str4 =new String("abc");
System.out.println(str3==str4); //输出为 false
System.out.println(str3.equals(str4)); //输出为 true
一看很熟悉啊,java面试题常有,知其然而不知其所以然呗。大致上是 abc存放在一个位置,后面的String str2为位置指向,并非new一个新地址。
最后再抄一个例子
String d ="2";
String e ="23";
e = e.substring(0, 1);
System.out.println(e.equals(d)); //输出为 true
System.out.println(e==d); //输出为 false
http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html