java中的Boxing和unboxing | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

java中的Boxing和unboxing

Java admin 8年前 (2016-08-20) 2736次浏览 已收录 扫描二维码

最近替一个朋友出的几道java的面试题,主要是面试java高级工程师,报酬就是晚饭,已经沦落到卖艺的境地。

题目很简单

  Integer i1 = 100;

  Integer i2 = 100;

  Integer i3 = 1000;

  Integer i4 = 1000;

  System.out.println(i1==i2);

  System.out.println(i3==i4);

很遗憾,没有一个答对的,正确答案是

true

false

如果面试者写这样的写是错误的,就算通过。

这个的原因要从java5的Boxingunboxing谈起,boxing就是封装基本类型的对象,unboxing就是转换对象到基本类型。

Integer, Long, Float, Double, Short, Character etc.都是这样的类型他们是immutable。

Boxing

在jdk1.4.2中,

必须是// Assigning primitive type to wrapper type

  Integer iWrapper = new Integer(10);

java5中

// Assigning primitive type to wrapper type

  Integer iWrapper = 10;

unboxing

在jdk1.4.2中,

int iPrimitive = iWrapper.intValue();

java5中

int iPrimitive = iWrapper;

下面是基本类型作为对象存储的范围,

boolean values true and false

All byte values

short values between -128 and 127

int values between -128 and 127

char in the range u0000 to u007F

如果int values between -128 and 127,VM使用相同的对象,否则创建新的对象。

所以这段代码,大家不要奇怪

System.out.println(0L == 0);

System.out.println(((Long)0L).equals(0));

第二行代码是0不等于0

因为大家犯这样的一个错误

static private final String LOCK = “LOCK”;

 void testMethod() {

   synchronized(LOCK) {

   …

   }

 }

应该用new,不要直接=,对于int,最好使用int a[0] ,因为array也是对象,不像Integer,a[0]的值可以改变。

package Test;

/**
 * Created by Whatled on 2016/8/20.
 */
public class BoxingTest {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 1000;
        Integer i4 = 1000;
        System.out.println(i1==i2);
        System.out.println(i3==i4);

        System.out.println(0L == 0);
        System.out.println(((Long)0L).equals(0));
    }
}

java中的Boxing和unboxing

来自:http://www.blogjava.net/badboyryan/archive/2007/06/12/123733.html

建议去看看评论。

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。