API文档 => java.lang => Integer 等


包装类与基本数据类型

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

image.png image.png

包装类常用方法

Byte,Short,Integer,Long类 继承自 Number类
Character,Boolean类 继承自Object类

基本数据类型和包装类之间的转换

装箱:基本数据类型 => 包装类
拆箱:包装类 => 基本数据类型

  1. package com.song.test;
  2. public class TryDemoOne {
  3. public static void main(String[] args) {
  4. // 1,自动装箱
  5. int t1 = 2;
  6. Integer t2 = t1;
  7. // 2,手动装箱
  8. Integer t3 = new Integer(t1);
  9. // 测试
  10. System.out.println("装箱");
  11. System.out.println("t1:" + t1);
  12. System.out.println("装箱后t2:" + t2);
  13. System.out.println("装箱后t3:" + t3);
  14. // 1,自动拆箱
  15. int t4 = t2;
  16. // 2,手动拆箱
  17. int t5 = t2.intValue();
  18. // 测试
  19. System.out.println("拆箱");
  20. System.out.println("t2:" + t2);
  21. System.out.println("拆箱后t4:" + t4);
  22. System.out.println("拆箱后t5:" + t5);
  23. }
  24. }

装箱
t1:2
装箱后t2:2
装箱后t3:2

拆箱
t2:2
拆箱后t4:2
拆箱后t5:2

补充1:
使用System.out.print()输出对象名的时候,会调用该对象的toString方法。
而Integer类的toString方法,返回的是里面的数据值

补充2:
intValue()用于把包装类转换为int类型的值,同理还有floatValue()等等

基本数据类型和字符串之间的转换

  1. package com.song.test;
  2. public class TryDemoOne {
  3. public static void main(String[] args) {
  4. // 基本数据类型转换为字符串
  5. int t1 = 2;
  6. String t2 = Integer.toString(t1);
  7. // 测试
  8. System.out.println("int类型转换为String类型对象t2=" + t2);
  9. System.out.println("===============================");
  10. // 字符串转换为基本数据类型
  11. // 1,包装类的parse
  12. int t3 = Integer.parseInt(t2);
  13. // 2,包装类的valueOf 先将字符串转换为包装类,在通过自动拆箱完成基本类型转换
  14. int t4 = Integer.valueOf(t2);
  15. // 测试
  16. System.out.println("String类型转换为int类型变量t3=" + t3);
  17. System.out.println("String类型转换为int类型变量t4=" + t4);
  18. }
  19. }

int类型转换为String类型对象t2=2
===============================
String类型转换为int类型变量t3=2
String类型转换为int类型变量t4=2

包装类对象的初始值

和基本类型的初始值不同,包装类对象的初始值为null
image.png

TryDemoOne.java

  1. package com.song.test;
  2. public class TryDemoOne {
  3. public static void main(String[] args) {
  4. Cat one = new Cat();
  5. System.out.println("昵称:" + one.name);
  6. System.out.println("年龄:" + one.month);
  7. System.out.println("体重:" + one.weight);
  8. }
  9. }

1,测试基本数据类型的初始值
Cat.java

  1. package com.song.test;
  2. public class Cat {
  3. String name;
  4. int month;
  5. double weight;
  6. }

昵称:null

年龄:0
体重:0.0

2,测试包装类对象的初始值

  1. package com.song.test;
  2. public class Cat {
  3. String name;
  4. Integer month;
  5. Double weight;
  6. }

昵称:null
年龄:null
体重:null

包装类对象间的比较

  1. package com.song.test;
  2. public class TryDemoOne {
  3. public static void main(String[] args) {
  4. Integer one = new Integer(100);
  5. Integer two = new Integer(100);
  6. System.out.println("one == two的结果:" + (one == two)); // false
  7. // == 两边放的如果是对象名,比较的是对象在内存中的引用(地址),而不仅仅是里面的值
  8. // 这里的one和two各自指向不同的内存空间,只不过其内存空间中的值都是100,所以结果是false
  9. Integer three = 100;
  10. System.out.println("three == 100的结果:" + (three == 100)); // true
  11. // 12行是一个自动装箱的操作
  12. // 13行执行“three == 100”的时候会自动拆箱,比较的就是100 == 100,所以结果是true
  13. Integer four = 100;
  14. System.out.println("three == four的结果:" + (three == four)); // true
  15. // Java背景知识说明之对象缓存区 **仅限于Integer类型对象**
  16. // Java中有一个缓存区(对象池),当-128<=参数<=127的时候:
  17. // 如果缓存区(对象池)中存在该对象,会直接拿过来使用,否则会创建该对象
  18. // Integer three = 100 具体来说就是 Integer three = Integer.valueOf(100)
  19. // 也就是说会自动产生一个包装类的对象
  20. // Integer four = 100的时候,缓存区里已经存在该对象(Integer three = 100的时候创建的)
  21. // 所以不会再创建值为100的包装类对象,而是直接拿过来用,所以结果是true
  22. Integer five = 200;
  23. System.out.println("five == 200的结果:" + (five == 200)); // true
  24. // 28行自动装箱
  25. // 29行执行“five == 100”的时候会自动拆箱,比较的就是100 == 100,所以结果是true
  26. Integer six = 200;
  27. System.out.println("five == six的结果:" + (five == six)); // false
  28. // 缓存区的要求是-128<=参数<=127,这里不满足,所以是两个不同的对象,结果为false
  29. }
  30. }

补充:
equals(Object IntegerObj)比较的是两对象中包含的基本数据类型的值是否相等,而不是两地址是否相等。