包装类 Wrapper - Java

包装类 Wrapper

1、说明

1.针对八种基本数据类型相应的引用类型—包装类
2. 有了类的特点,就可以调用类中的方法。

基本数据类型包装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

2、关系图

IDEA显示类图: 右键->Diagrams在这里插入图片描述
(1)Boolean 在这里插入图片描述
说明:这里的 “蓝色C” 表示 class,这里的 “绿色I” 是 interface,虚线指的是“实现”关系(实现接口);实线指的是继承关系。
(2)Character
在这里插入图片描述
(3) Byte 、 Short 、 Integer 、 Long 、 Float 、 Double
在这里插入图片描述
在Number上输入空格,就会出现其子类。

3、包装类和基本数据的转换

演示包装类和基本数据类型的相互转换,这里以int和 Integer演示。

  1. jdk5 前的手动装箱和拆箱方式。
    装箱:基本类型 -> 包装类型
    拆箱:包装类型 -> 基本类型
  2. jdk5 以后(含jdk5)的自动装箱和拆箱方式。
  3. 自动装箱底层调用的是 valueOf 方法,比如 lnteger.valueOf()。
public static void main(String[] args) {
        // -------------------------jdk5之前------------------------
        // 手动装箱 int -> Integer
        int n1 = 100;
        Integer integer_1 = new Integer(n1);
        Integer integer_2 = Integer.valueOf(n1);

        //手动拆箱 Integer -> int
        int i = integer_1.intValue();

        // -------------------------jdk5之后------------------------
        // 自动装箱
        int n2 = 99;
        Integer integer_3 = n2; //底层使用的是Integer.valueof(n2),debug一下
        // 自动拆箱
        int n3 = integer_3; 底层使用的是intValue();
    }

4、练习

(1)

代码是否正确?

Double d = 100d; 
Float f = 1.5f;

正确,是自动装箱
自动装箱 Double.valueOf(100d),自动装箱 Float.valueOf(1.5f);

(2)

分析输出结果。

public class WrapperExercise01 {
    public static void main(String[] args) {
        Object obj1 = true? new Integer(1) : new Double(2.0);
        System.out.println(obj1);

        Object obj2;
        if(true)
            obj2 = new Integer(1);
        else
            obj2 = new Double(2.0);
        System.out.println(obj2);
    }
}

三元运算符【是一个整体】
obj1 = 1.0
obj2 = 1

5、包装类型和String类型的相互转换

(1) Wrapper -> String

以 Integer 为例

Integer i = 100;//自动装箱
//方法1
String str1 = i + "";
//方法2
String str2 = i.toString();
//方法3
String str3 = String.valueOf(i);

(2) String -> Wrapper

String str4 = "123";
//方法1
Integer i2 = Integer.parseInt(str4);
//方法2
Integer i3 = new Integer(str4);

6、Integer类和Character类的常用方法

    public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE); //返回最小值
        System.out.println(Integer.MAX_VALUE);//返回最大值

        System.out.println(Character.isDigit('a'));//判断是不是数字
        System.out.println(Character.isLetter('a'));//判断是不是字母
        System.out.println(Character.isUpperCase('a'));//判断是不是大写
        System.out.println(Character.isLowerCase('a'));//判断是不是小写

        System.out.println(Character.isWhitespace('a'));//判断是不是空格
        System.out.println(Character.toUpperCase('a'));//转成大写
        System.out.println(Character.toLowerCase('A'));//转成小写

    }

7、Integer类面试题

1

判断正误。

    public static void main(String[] args) {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);  //False

        Integer m = 1;
        Integer n = 1;
        System.out.println(m == n); 
        
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);
    }

我的答案:不知道!

分析:
① 第二、三行,i 和 j 都是对象,==判断两个对象是否为同一个对象,返回false。
② 第六、七行,底层是 Integer.valueOf(1); 要阅读valueOf源码。

在这里插入图片描述
在-128到127之间,返回的是 IntegerCache.cache[i + (-IntegerCache.low)] ,如果传进来的值是相同且在这个范围的,就是同一个对象。返回true。
③ 第10、11行,超过128,所以是不同的对象,False。

答案为 false true false

2

判断正误

public class WrapperExercise03 {
    public static void main(String[] args) {
//示例一
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2);
//示例二
        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4);

//示例三
        Integer i5 = 127;//底层Integer.valueOf(127)
        Integer i6 = 127;//-128~127
        System.out.println(i5 == i6);
//示例四
        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7 == i8);
//示例五
        Integer i9 = 127; //Integer.valueOf(127)
        Integer i10 = new Integer(127);
        System.out.println(i9 == i10);

//示例六
        Integer i11=127;
        int i12=127;

        System.out.println(i11==i12); 
//示例七
        Integer i13=128;
        int i14=128;
        System.out.println(i13==i14);


    }
}

分析
示例一 new出来的一定不是同一个对象 F
示例二 new出来的一定不是同一个对象 F
示例三 底层是valueof且 在-128-127 T
示例四 底层是valueof且 不在-128-127 F
示例五 一个底层,一个new,还是 F
示例六 只要有基本数据类型,判断的是值是否相同 T
示例七 基本数据类型T

我的答案:
T
F
T
F
T
T
F

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基本数据类型和包装类是Java中用来表示数据的两种不同方式。 1. 基本数据类型(Primitive Data Types): - Java的基本数据类型有8种:byte、short、int、long、float、double、char和boolean。 - 这些基本数据类型直接存储着数据的值,它们是直接操作内存的,因此效率较高。 - 基本数据类型不具有任何方法,不能调用任何方法。 2. 包装类(Wrapper Classes): - 包装类是用来将基本数据类型包装起来,以便能够以对象的形式使用。 - Java提供了对应于每种基本数据类型的包装类:Byte、Short、Integer、Long、Float、Double、Character和Boolean。 - 包装类提供了许多有用的方法,可以进行类型转换、比较、运算等操作。 - 包装类是不可变的(immutable),即一旦创建就无法修改其值。 区别: - 基本数据类型是直接存储数据的值,而包装类是将基本数据类型包装成对象。 - 基本数据类型效率较高,而包装类的效率较低,因为需要进行对象的创建和销毁操作。 - 基本数据类型不能调用任何方法,而包装类提供了许多有用的方法。 - 包装类可以用于泛型、集合类等需要对象作为参数的场景,而基本数据类型则不能直接使用。 - 基本数据类型在内存中占据的空间大小是固定的,而包装类的内存消耗较大,因为需要额外存储一些信息。 总的来说,基本数据类型适合用于简单的数据操作,而包装类适合用于需要更多功能和灵活性的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值