Java面向对象中 包装类(封装类)的详解

简介: Java面向对象中 包装类(封装类)的详解

包装类的使用:

1.java提供了8种基本数据类型的封装类,使得基本数据类型的变量具有了类的特征。

图解如下:

2.要点:掌握基本数据类型,包装类,String三者之间的转换。

2.1 基本数据类型—>包装类:调用包装类的适配器。装箱

Example:

public class WarpperTest {
    public static void main(String[] args) {
            int i=10;
            Integer in1=new Integer(i);
            Integer integer2 = Integer.valueOf(i);
//        System.out.println(i.toString); //报异常
            System.out.println(in1.toString()); //10
            Boolean b=new Boolean("TRue");
            System.out.println(b); //true
    }
}

2.2 包装类—>转换为基本数据类型,基本数据类型XXX调用XXXValue()方法。 拆箱

Example:

Integer a=new Integer(10);
        int c = a.intValue();
        System.out.println(c+1);//11
        Boolean d = new Boolean("R");
        boolean e = d.booleanValue();
        System.out.println(e+"u");//falseu
        Float f=new Float("15.2");
        float g=f.floatValue();
        System.out.println(g+1);//16.2

2.3.JDK5.0 新特性:自动装箱,自动拆箱

Example:

//自动装箱
        int h=5;
        Integer y=h; //底层使用的是Integer.valueOf(h)
        boolean r=true;
        Boolean r1=r;
        //自动拆箱
        System.out.println(y.toString());
        int x=y; //底层调用的是intValue()方法
        boolean r2=r1;

2.4.基本数据类型,包装类—>String类型

public class DayTest {
    public static void main(String[] args) {
        int a=10;
        boolean b=true;
        //方式1:连接运算符
        System.out.println(a+"");
        System.out.println(b+"");
        //方式2:调用String的valueOf(XXX xxx)
        int c=11;
        String c1=String.valueOf(c);
        boolean d=true;
        String d1=String.valueOf(d);
        System.out.println(d1+a);
        float e=15.6f;
        String e1=String.valueOf(e);
        System.out.println(e1);
    }
}

2.5. String类型–>包装类,基本数据类型

String f="123";
        int f1=Integer.parseInt(f);
        System.out.println(f1);
        //报异常
       /* String h="123你好";
        int h1=Integer.parseInt(h);
        System.out.println(h1);*/
        String q="true1";
        boolean q1=Boolean.parseBoolean(q);
        System.out.println(q1);  //输出false

包装类Integer和Character的常用方法如下:

public class WrapperMethod {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);//最大值
        System.out.println(Integer.MIN_VALUE); //最小值
        System.out.println(Character.isDigit('1'));//判断是不是数字
        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'));//转成小写
    }
}

输出结果如下:

2147483647
-2147483648
true
true
false
true
false
A
a

Integer的创建机制如下,具体注释已经在代码中给出:

public class WrapperExercise {
    public static void main(String[] args) {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j); //false
        //这里主要看范围-128~127 就是直接返回,否则就要new Integer(i)
        /*
        解读:
        1、如果i在IntegerCache.low(-128)到IntegerCache.high(127),就直接从数组返回
        2、如果不在-128~127,就直接new Integer(i)
        public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
         */
        Integer m = 1; //底层Integer.valueOf(1) ->阅读源码
        Integer n = 1;
        System.out.println(m == n); //true
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y); //false
    }
}

Integer面试题的详解

public class WrapperExercise02 {
    public static void main(String[] args) {
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2); //false
        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4); //false
        Integer i5 = 127;
        Integer i6 = 127;
        System.out.println(i5 == i6); //true
        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7 == i8); //false
        Integer i9 = 127;
        Integer i10 = new Integer(127);
        //i9 是从数组中取出的  而i10是new 出来的 所以不是同一个对象
        System.out.println(i9 == i10); //false
        Integer i11 = 127;
        int i12 = 127;
        //只要有基本数据类型,判断的是值是否相同
        System.out.println(i11 == i12);//true
        Integer i13 = 128;
        int i14 = 128;
        System.out.println(i13 == i14);//true
    }
}

以上是包装类的详解,供大家参考学习,有不当之处,可在评论区指正!


目录
相关文章
|
5天前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
10 0
|
4天前
|
安全 Java 开发者
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
12 1
|
4天前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
13 1
|
6天前
|
Java 调度
Calendar类在Java中的应用
Calendar类在Java中的应用
|
10天前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解
|
4天前
|
存储 运维 前端开发
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
15 0
|
4天前
|
安全 Java 数据处理
Java面试题:什么是Java中的Optional类及其使用场景?
Java面试题:什么是Java中的Optional类及其使用场景?
8 0
|
4天前
|
前端开发 Java 编译器
Java面试题:描述Java类的加载过程,包括加载、链接、初始化等阶段。
Java面试题:描述Java类的加载过程,包括加载、链接、初始化等阶段。
8 0
|
4天前
|
设计模式 安全 NoSQL
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
12 0
|
5天前
|
设计模式 存储 缓存
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
10 0