http://blog.csdn.net/mlc0202/article/details/7393471
http://blog.csdn.net/rock_ray/article/details/19496693
1,自动装箱作用是自动打包,将基本类型数据转换为对象 ,
2,自动装箱时,对于值从-128-127之间的数,被装箱后,会被放在内存中进行重用,如果超出了这个值的范围就不会被重用的,所以每次new出来的都是一个新的对象
<span style="font-size:14px;">Integer data1 = 500; </span>
<span style="font-size:14px;">Integer data2 = 500; </span>
<span style="font-size:14px;">System.out.println(data1==data2); falseI</span>
<span style="font-size:14px;">Integer a = 127;
Integer b = 127;
</span><pre class="java" name="code"><span style="font-size:14px;">System.out.println("a==b:"+(a==b));<span><span> </span></span><span class="comment">//结果为true,因为a和b指向了同一个Integer对象,</span> </span>
//因为当数值在byte范围内时,对于新特性,如果该数值的对象已经存在,则不会再开辟新的空间。
//byte的范围:-128~127 , Integer x =new Integer("123");//此对象表示字符串参数所指示的int值
Integer y = new Integer(123); //此对象表示指定的int值
sop("x==y:"+(x==y));//两个对象,内存地址不同,false
sop("x.equals(y):"+x.equals(y));//两个对象内容相同,即int值相同,true
3,Integer i = null;//表明i没有参考至任何对象int j = i ;//相当于 int j = i.intValue()
这样的代码,编译时是可以通过的,因为它的语法是正确的,但在运行时,就会排除NullPointerException错误,这是由于i并没有参考至任何对象造成的
4,基本数据类型转成字符串。
基本数据类型+""
基本数据类型.toString(基本数据类型值);
如:Integer.toString(34); //将整数34变成字符串"34
5,字符串转成基本数据类型。
static int parseInt(String str):将字符串参数作为有符号的十进制整数进行解析。
xxx a = Xxx.parseXxx(String);
例:
int num = Integer.parseInt("123");
double num = Double.parseDouble("12.34");
boolean b = Boolean.parseBoolean("true");
方法二(非静态):
Integer的非静态方法intValue(),使用前要创建Integer对象。
例: Integer i = new Integer("123");
int num = i.intValue();
<span style="font-size:14px;"><a target=_blank target="_blank" href="http://,包装类都实现了Comparable接口,可以实现对象之间的比较,所以包装类之间的比较尽量用compareTo,而不是><=这些运算符。切记。">http://blog.csdn.net/derson2388/article/details/8026518</a>
</span>
1,为什么讲基本类型转为类,包装类作为类,可以容纳更多的信息,可以提供更多的操作。另外,包装类都实现了Comparable接口,可以实现对象之间的比较,所以包装类之间的比较尽量用compareTo,而不是><=这些运算符。切记。
2,显式赋值,我们可以理解为有赋值符号出现的情况,比如,Integer i = 11;这里编译器会自动的帮你完成把11这个int的基本类型装箱成包装类实例的工作,这样就不用我们再手动的转换了。
隐式赋值,就是没有复制符号出现的情况,这点我们很多人经常忽略,比如方法调用时候的参数传递,比如我们有一个接受Integer类型参数的方法(void method(Integer i)),我们在调用的时候可以直接传递一个基本类型的实参进去(method(5))
装箱/拆箱原则,就是基本类型可以先加宽(比如int转换为long),再转变成宽类型的包装类(Long),但是不能转变成宽类型的包装类型。
比如我们有个方法 void method(long l),我们通过method(5)是可以调用该方法的,因为int类型的5被加宽成了long类型;但是如果这个方法变成void method(Long l),我们通过method(5)就不能调用它了,因为int类型的5是不能直接转换成Long包装类的。切记。
<span style="font-size:14px;"> int n=420;
Integer i = new Integer(n);
List<Integer> l=new ArrayList<Integer>();
l.add(i);
l.add(i);
System.out.println(l.get(0)==l.get(1)); //true 原因:只new了一个对象i
</span><pre name="code" class="java"><span style="font-size:14px;">
int n=420;
List<Integer> l=new ArrayList<Integer>();
l.add(n);
l.add(n);
System.out.println(l.get(0)==l.get(1)); false//原因:自动生成两个Integer对象来封装n,两个对象肯定是两个不同hashCode,所以输出false</span>
http://bbs.csdn.net/topics/390639736?page=1
<span style="font-size:14px;">
Integer a=1;
Integer b=2;
Integer c=3;
Integer d=3;
<code class="java spaces"></code><code class="java plain">Long g=3L;</code>
System.out.println("c==d is:"+(c==d)); //true <span>自动装箱时,对于值从-128-127之间的数,被装箱后,会被放在内存中进行重用,</span> 存放在一个地方<span></span></span><span><span style="font-size:14px;"> </span>
</span><span style="font-size:14px;">
System.out.println("c==(a+b) is:"+(c==(a+b))); //true 转为int
System.out.println("c.equals(a+b) is:"+(c.equals(a+b))); //true</span>
<span style="font-size:14px;"> System.out.println("g==(a+b) is:"+(g==(a+b))); //true a+b拆箱为int,LONG拆箱为int,比较的是值</span>
<span style="font-size:14px;"> </span><pre name="code" class="java"> <span style="font-size:14px;"> System.out.println("g==(a+b) is:"+(g==c)); </span> <span style="font-size:14px;">//编译不能通过,不同类型不能比较</span>
System.out.println("g.equals(a+b) is:"+(g.equals(a+b))); //equals是值比较,但只能用作同类型的object作比较。 Long 对比Integer就相当于对比null。然后就false。 } http://blog.csdn.net/jackiehff/article/details/8509056
<span style="font-size:14px;">Integer integer1 = 100;
<span><span class="keyword">int</span><span> int1 = </span><span class="number">100</span><span>;</span></span>
<span>System.out.println(<span class="string">"integer1==int1: "</span><span> + (integer1 == int1));</span><span class="comment">// true Integer缓存对象拆箱后与int比较</span><span>
</span></span>
</span>
1,Integer 的缓存[-127,128];
这就归结于java对于Integer与int的自动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)。
为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象
2, 其它基本数据类型对应的包装类型的自动装箱池大小
Byte,Short,Long对应的是-128~127
Character对应的是0~127
Float和Double没有自动装箱池
3, Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率。通过上面的研究和测试,结论如下:
(1)Integer和 int之间可以进行各种比较;Integer对象将自动拆箱后与int值比较
(2)两个Integer对象之间也可以用>、<等符号比较大小;两个Integer对象都拆箱后,再比较大小
(3) 两个Integer对象最好不要用==比较。因为:-128~127范围(一般是这个范围)内是取缓存内对象用,所以相等,该范围外是两个不同对象引用比较,所以不等。
http://blog.csdn.net/jairuschan/article/details/7513045
1,注意的问题
Integer integer100=null;
int int100=integer100;
这两行代码是完全合法的,完全能够通过编译的,但是在运行时,就会抛出空指针异常。
其中,integer100为Integer类型的对象,它当然可以指向null。
但在第二行时,就会对integer100进行拆箱,也就是对一个null对象执行intValue()方法,当然会抛出空指针异常。
所以,有拆箱操作时一定要特别注意封装类对象是否为null。