API文档 => java.lang => Integer 等
包装类与基本数据类型
我们知道,Java的数据类型包括两大类,基本数据类型和引用数据类型。
其中,基本数据类型是不具有对象特征的,即他们不能像对象一样拥有属性和方法,也无法进行对象化交互。
而包装类的产生,就是为了解决基本数据类型存在的这些问题。

包装类常用方法
Byte,Short,Integer,Long类 继承自 Number类
Character,Boolean类 继承自Object类
基本数据类型和包装类之间的转换
装箱:基本数据类型 => 包装类
拆箱:包装类 => 基本数据类型
package com.song.test;public class TryDemoOne {public static void main(String[] args) {// 1,自动装箱int t1 = 2;Integer t2 = t1;// 2,手动装箱Integer t3 = new Integer(t1);// 测试System.out.println("装箱");System.out.println("t1:" + t1);System.out.println("装箱后t2:" + t2);System.out.println("装箱后t3:" + t3);// 1,自动拆箱int t4 = t2;// 2,手动拆箱int t5 = t2.intValue();// 测试System.out.println("拆箱");System.out.println("t2:" + t2);System.out.println("拆箱后t4:" + t4);System.out.println("拆箱后t5:" + t5);}}
装箱
t1:2
装箱后t2:2
装箱后t3:2
拆箱
t2:2
拆箱后t4:2
拆箱后t5:2
补充1:
使用System.out.print()输出对象名的时候,会调用该对象的toString方法。
而Integer类的toString方法,返回的是里面的数据值
补充2:
intValue()用于把包装类转换为int类型的值,同理还有floatValue()等等
基本数据类型和字符串之间的转换
package com.song.test;public class TryDemoOne {public static void main(String[] args) {// 基本数据类型转换为字符串int t1 = 2;String t2 = Integer.toString(t1);// 测试System.out.println("int类型转换为String类型对象t2=" + t2);System.out.println("===============================");// 字符串转换为基本数据类型// 1,包装类的parseint t3 = Integer.parseInt(t2);// 2,包装类的valueOf 先将字符串转换为包装类,在通过自动拆箱完成基本类型转换int t4 = Integer.valueOf(t2);// 测试System.out.println("String类型转换为int类型变量t3=" + t3);System.out.println("String类型转换为int类型变量t4=" + t4);}}
int类型转换为String类型对象t2=2
===============================
String类型转换为int类型变量t3=2
String类型转换为int类型变量t4=2
包装类对象的初始值
和基本类型的初始值不同,包装类对象的初始值为null
TryDemoOne.java
package com.song.test;public class TryDemoOne {public static void main(String[] args) {Cat one = new Cat();System.out.println("昵称:" + one.name);System.out.println("年龄:" + one.month);System.out.println("体重:" + one.weight);}}
1,测试基本数据类型的初始值
Cat.java
package com.song.test;public class Cat {String name;int month;double weight;}
昵称:null
年龄:0
体重:0.0
2,测试包装类对象的初始值
package com.song.test;public class Cat {String name;Integer month;Double weight;}
昵称:null
年龄:null
体重:null
包装类对象间的比较
package com.song.test;public class TryDemoOne {public static void main(String[] args) {Integer one = new Integer(100);Integer two = new Integer(100);System.out.println("one == two的结果:" + (one == two)); // false// == 两边放的如果是对象名,比较的是对象在内存中的引用(地址),而不仅仅是里面的值// 这里的one和two各自指向不同的内存空间,只不过其内存空间中的值都是100,所以结果是falseInteger three = 100;System.out.println("three == 100的结果:" + (three == 100)); // true// 12行是一个自动装箱的操作// 13行执行“three == 100”的时候会自动拆箱,比较的就是100 == 100,所以结果是trueInteger four = 100;System.out.println("three == four的结果:" + (three == four)); // true// Java背景知识说明之对象缓存区 **仅限于Integer类型对象**// Java中有一个缓存区(对象池),当-128<=参数<=127的时候:// 如果缓存区(对象池)中存在该对象,会直接拿过来使用,否则会创建该对象// Integer three = 100 具体来说就是 Integer three = Integer.valueOf(100)// 也就是说会自动产生一个包装类的对象// Integer four = 100的时候,缓存区里已经存在该对象(Integer three = 100的时候创建的)// 所以不会再创建值为100的包装类对象,而是直接拿过来用,所以结果是trueInteger five = 200;System.out.println("five == 200的结果:" + (five == 200)); // true// 28行自动装箱// 29行执行“five == 100”的时候会自动拆箱,比较的就是100 == 100,所以结果是trueInteger six = 200;System.out.println("five == six的结果:" + (five == six)); // false// 缓存区的要求是-128<=参数<=127,这里不满足,所以是两个不同的对象,结果为false}}
补充:
equals(Object IntegerObj)比较的是两对象中包含的基本数据类型的值是否相等,而不是两地址是否相等。
