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

八大基本数据类型与之相对应的封装类:
基本数据类型 | 基本数据类型的封装类 |
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Char |
基本数据类型封装类的方法:
装箱和拆箱需要注意的问题:
装箱过程:
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 创建出来的。
来源:刘广法博客,请注意转载出处,网站地址为:https://liuguangfa.com/