雪花新闻

Java教程 基本数据类型的封装类

八大基本数据类型与之相对应的封装类:

基本数据类型封装类的方法:

装箱和拆箱需要注意的问题:

装箱过程:

1、通过new的方法可以装箱,但是随着时代的进步这种方法已经逐渐淘汰。

2、目前所认同的装箱方法是通过调用valueOf(); 来进行实现。

//现在已经不建议使用Integer a = new Integer(10);//现在使用的是Integer b = Integer.valueOf(10);

基本数据类型、基本数据类型封装类进行比较的问题:

1、通过创建实例化进行比较:

Integer a = new Integer(10);Integer b = new Integer(10);System.out.println(a == b);System.out.println(a.equals(b));

Java控制台输出结果为:

false

true

也就是说,通过创建实例来进行赋值,两个实例出来的对象并不是一样,而通过equals 方法进行对比会发现两个值是一样的

也就是说,a 和 b 并不是相同的对象,但是两个值是一样的。

2、通过valueOf进行对比:

Integer a = Integer.valueOf(10);Integer b = Integer.valueOf(10);System.out.println(a == b);System.out.println(a.equals(b));

Java控制台输出的结果是:

true

true

通过 valueOf 进行赋值创建的 Integer 类型的 a 和 b 两个对象和值是一样的。因为在Java默认的情况下,自动缓存-128~127 之间的整数,也就是说你赋值给 a 的时候,这时候指向的是Java缓存的“1”,在赋值给 b 的时候,还是指向Java系统中缓存的“1”,此时的 a 和 b 指向的位置是一样的。

3、通过创建字符串进行对比:

String a = "hello";String b = "hello";System.out.println(a == b);System.out.println(a.equals(b));String a1 = new String("hello");String b1 = new String("hello");System.out.println(a1 == b1);System.out.println(a1.equals(b1));

Java控制台的输出结果为:

true

true

false

true

这时候你会发现,通过字符串直接创建的 a 和 b 进行对比都是 ture ,还是因为Java系统将常用的字符串进行了缓存,创建 a 和 b 的时候,Java将直接已经缓存出来的“hello”进行了赋值,也就是结果是一样的。

上面Java代码的 5~8 行是说,通过 new 创建一个 String 类型的实例化,在进行对比也就产生了不同的结果, a1 和 b1 的不是通过缓存直接赋值的,而是通过构造对象来赋值,此时的 a1 和 b1 是完全不同的两个对象。

【重点】:

如果按照栈和堆之间的关系进行理解的话,此时在堆上应该有三个“hello”的对象,一个是系统缓存的,一个是通过 a1 创建出来的,一个是通过 b1 创建出来的。

举报/反馈
相关文章