Java自动装箱和自动拆箱是Java语言的一颗语法糖。
下面说一下java的自动装箱和拆箱的例子
1. 深入理解java虚拟机上的一个例子
public static void testJvmBook(){
Integer a =1 ;
Integer b=2 ;
Integer c= 3 ;
Integer d = 3 ;
Integer e=321 ;
Integer f =321 ;
Long g = 3l;
System.out.println(c==d); //true
System.out.println(e==f); //false
System.out.println(c==(a+b)); //true
System.out.println(c.equals(a+b)); //true
System.out.println(g==(a+b));//true
System.out.println(g.equals(a+b));//false
}
输出结果:
- true
- false
- true
- true
- true
- false
仔细分析一下:1.结果为true,因为在-128-127之内的装箱操作的对象是重用的。
2.结果为:false ,超出了-128-127的范围,此时装箱最后的对象是不重用的,他们会分别的创建对象。
3.因为在遇到算术运算的时候,会发生自动的装箱和拆箱操作。
4.同3
总结:
//自动装箱就是将基本数据类型封装成对象
//基本数据类型与对象的区别是:前者没有方法,后者可以像想处理对象一样处理
Integer a = 1 ;//这将会自动的装箱--->Integer a = new Integer(1);
//自动拆箱就是将基本数据从对象中自动的取出来
int b = a ;//自动拆箱
/**
//基本数据类型与对象的区别是:前者没有方法,后者可以像想处理对象一样处理
Integer a = 1 ;//这将会自动的装箱--->Integer a = new Integer(1);
//自动拆箱就是将基本数据从对象中自动的取出来
int b = a ;//自动拆箱
* 注意:
* 1.在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,
* 会存在内存中被重用,
* 2.如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用
* 3.当遇到算数运算的时候会自动的装箱和自动拆箱。
* 4.当发现有转型时会自动的装箱和自动的拆箱
*
*/
String的自动装箱和拆箱
public static void testString(){
String str1 = "hello" ;
String str2 = "hello" ;
String str3 = new String("hello") ;
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
System.out.println(str1==str3);
System.out.println(str1.equals(str3));
}
结果:
- true
- true
- false
- true
具体分析可以看String的内存分析,推荐一篇文章:
http://www.cnblogs.com/devinzhang/archive/2012/01/25/2329463.html
String有一个特性是“共享”