包装类

4.包装类

4.1介绍

基本数据类型, 包装成 (变成引用数据类型)

作用:变成类, 就可以创建对象了,对象就可以调用方法方便的解决问题了

4.2基础类型对应的包装类

4.2.1分类

基本数据类型引用数据类型
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

4.2.2如何进行包装(用Integer举例)

public Integer(int value)
public static Integer valueOf(int i)

4.2.2.1手动装箱

在 jdk5 以前,将基本数据类型转换为包装类需要我们手动。这里以基本数据类型 int 转换包装类 Integer 为例。

int n1 = 100;

//手动装箱 int -> Integer
Integer integer = new Integer(n1);
//或者 Integer integer = Integer.valueOf(n1);

4.2.2.2自动装箱(JDK5)

在 jdk5 及以后,实现了自动装箱工作。

int n2 = 200;
//自动装箱
Integer integer2 = n2;//底层使用的是 Integer.valueOf(n2)

原理:在将一个基本数据类型的值赋给其对应的包装类对象时,java会自动调用其中的valueof方法,该方法接收这个基本数据类型的值,然后创建一个该包装类的对象并将这个值存进去,然后返回该对象

4.2.2.3手动拆箱

在 jdk5 以前,将包装类转换为基本数据类型需要我们手动。这里以基本数据类型 Integer转换包装类 int 为例。

//这里的integer是一个Integer对象
int a = integer.intValue();

4.2.2.4自动拆箱(JDK5)

在 jdk5 及以后,实现了自动拆箱工作。

//自动拆箱
int n3 = integer2;//底层使用的是 intValue()方法

自动拆箱:在将一个基本数据类型的值和其对应的包装类对象进行运算时,java会自动调用xxxValue方法,将该对象转化成对应基本数据类型的值

4.2.2.5结论

我们现在使用不需要在手动装箱和拆箱,直接使用就可以

基本数据类型, 和对应的包装类是可以直接在一起运算的。

4.2.3包装类面试题

public static void main(String[] args) {
   Integer i1 = 127;
   Integer i2 = 127;
   System.out.println(i1 == i2); //true

   Integer i3 = 129;
   Integer i4 = 129;
   System.out.println(i3 == i4); //false
}

自动装箱现象:

如果装箱的数据, 在byte的取值范围内 (-128~127),==号比较的结果就是true, 反之是false。

解释原因:

Integer.valueOf();


Integer[] cache = {new Integer(-128), new Integer(-127) .... new Integer(126), new Integer(127)};

public static Integer valueOf(int i) {              // 126
   if (i >= -128 && i <= 127) {
       return IntegerCache.cache[i + 128];         // 254
  }
   return new Integer(i);
}

参考:

Integer自动装箱的时候会调用valueOf方法。方法的源码中, 会进行一个判断, 判断装箱的数据是否在 -128~127之间:

在 : 会从底层的缓存中取出对象进行使用。 ​ 不在 : 会创建出一个新的对象。

底层的缓存实际上是一个Integer类型的数组, 名字叫做cache, 内部存储了 -128~127 之间所有的Integer对象。如果装箱的数据在范围中, 就会从缓存中取出已有的对象使用, 避免创建太多重复的对象。

4.2.4常用方法

4.2.4.1Integer的常用方法

方法名说明
public static String toBinaryString(int i) 得到二进制
public static String toOctalString(int i) 得到八进制
public static String toHexString(int i) 得到十六进制
public static int parseInt(String s) 将字符串类型的整数转成int类型的整数
4.2.4.1.1进制转化(了解即可)
private static void method() {
   int number = 12;
   System.out.println(Integer.toBinaryString(number));
   System.out.println(Integer.toOctalString(number));
   System.out.println(Integer.toHexString(number));
}
4.2.4.1.2parseInt
public static void main(String[] args) {
   String s = "123";
   System.out.println(Integer.parseInt(s) + 100);  // 223
}

public static int parseInt(String s); 将传入的字符串转换为数字。

字符串必须是数字字符串 "123"。

posted @   灵泽pro  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示