java自动装箱与拆箱

来源:互联网 发布:编程软件利润率 编辑:程序博客网 时间:2024/05/19 12:16

网上看了些java装箱与拆箱,根据自己理解写一些感悟,本人是菜鸟作品,大神勿进

自动拆装箱为java5以后的功能,主要作用为8种基础数据类型进行拆装箱。

例1:Integer的拆装箱

1)装箱  

Integer b=1;

  intb=1

  两种方式的区别,1是对象的初始化,可以有 b.method 第二种则没有方法可使用

 Integer b=1;其实为 Integer b=Integer.valueOf(1);由java自动实现了装箱操作。 其实我还是没看懂,所以我看了下valueOf的源码,如下

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,再返回来看源码,就一目了然了。
心路历程完成,再看看String的

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.substring(01);
System.out.println(e.equals(d)); //输出为 true 
System.out.println(e==d); //输出为 false

e的初始值与d并不同,因此e与d是各自创建了个对象,(e==d)为false 。
同理可知,第一个例子中的str3与str4也是各自new了个对象,而str1与str2却是引用了同一个对象。
最后的话:作者所有文章为了自己更好的理解知识,无侵犯网上作者权益,如果有侵权,请通知我。谢谢,参考博文:

http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html

0 0