• 【从零开始的Java开发】1-5-2 包装类与基本数据类型、常用API、基本数据类型与包装类、字符串之间的转换、包装类的初始值与比较、对象常量池


    包装类与基本数据类型

    Java的数据类型:
    在这里插入图片描述
    其中,基本数据类型是没有属性、方法的,也无法对象化交互。
    包装类的产生就是为了解决这样的问题。
    通过包装类,可以使基本数据类型拥有属性、方法,可以对象化交互。

    包装类与基本数据类型
    在这里插入图片描述

    包装类常用方法

    https://docs.oracle.com/javase/8/docs/api/
    我们以Integer为例,查看文档,了解其常用的属性和方法:
    在这里插入图片描述

    我们可以看到,Java中包装类都用final修饰,都是不允许继承,也没有子类的。
    且,Integer是继承自Number类的——实际上,所有数值型都是继承自Number类的。
    在这里插入图片描述
    而char的包装类Character,boolean的包装类Boolean,都是继承自Object的。
    在这里插入图片描述

    在这里插入图片描述
    在这里可以看到Integer的相关方法:
    在这里插入图片描述

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

    装箱:把基本数据类型的值转换为相应包装类的对象。
    拆箱:把包装类的对象转换为对应基本数据类型的值。

    装箱代码:装箱分为自动装箱和手动装箱。

    public class WrapTest1 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		// 装箱:把基本数据类型转换为包装类
    		// 1、自动装箱
    		int t1 = 2;
    		Integer t2 = t1;
    
    		// 2、手动装箱
    		Integer t3 = new Integer(t1);
    
    		// 测试
    		System.out.println(t1);
    		System.out.println(t2);
    		System.out.println(t3);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    输出:

    2
    2
    2
    
    • 1
    • 2
    • 3

    拆箱代码:有自动拆箱和手动拆箱两种。

    public class WrapTest1 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		// 装箱:把基本数据类型转换为包装类
    		// 1、自动装箱
    		int t1 = 2;
    		Integer t2 = t1;
    
    		// 2、手动装箱
    		Integer t3 = new Integer(t1);
    
    		// 拆箱:把包装类转换为基本数据类型
    		// 1、自动拆箱
    		int t4 = t2;
    
    		// 2、手动拆箱
    		int t5 = t2.intValue();
    		// 测试
    		System.out.println(t4);
    		System.out.println(t5);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    输出:

    2
    2
    
    • 1
    • 2

    也可以这样转换:

    double t = t2.doubleValue();
    System.out.println(t);
    
    • 1
    • 2

    输出:2.0

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

    基本数据类型转换为字符串

    public static void main(String[] args) {
    		// 基本数据类型转换为字符串
    		int t1 = 2;
    		String t2 = Integer.toString(t1);
    		System.out.println(t2);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出:2

    字符串转换为基本数据类型

    方法1:包装类的parse方法

    public static void main(String[] args) {
    		// 基本数据类型转换为字符串
    		int t1 = 2;
    		String t2 = Integer.toString(t1);
    
    		int t3 = Integer.parseInt(t2);
    		System.out.println(t3);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输出:2

    方法2:包装类的valueOf方法。

    public static void main(String[] args) {
    		// 基本数据类型转换为字符串
    		int t1 = 2;
    		String t2 = Integer.toString(t1);
    
    		int t3 = Integer.valueOf(t2);
    		System.out.println(t3);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输出:2

    包装类相关知识

    包装类的初始值

    基本数据类型的初始值
    在这里插入图片描述
    包装类的初始值
    null

    包装类对象间的比较

    思考:
    在这里插入图片描述
    答案:

    false
    true
    true
    true
    false
    
    • 1
    • 2
    • 3
    • 4
    • 5

    为什么one==twofalse
    因为one和two指向的是两个不同的空间,只是他们的值都是100而已。因此,他们不相等。

    public static void main(String[] args) {
    		Integer one=new Integer(100);
    		Integer two=new Integer(100);
    		System.out.println(one);
    		System.out.println(two);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出:false

    为什么three==100true:它其实完成了自动拆箱的操作,所以是true。

    Integer three=100;
    System.out.println(three==100);
    
    • 1
    • 2

    输出:false

    为什么three==fourtrue

    Integer three = 100;
    Integer four = 100;
    System.out.println(three == four);
    
    • 1
    • 2
    • 3

    输出:true

    原因:Integer four=100其实执行的是Integer four=Integer.valueOf(100);
    为了提高运行效率,Java有一个常量数组的缓存区(对象池),当 -128<=数值<=127 时,Java会直接在对象池里找这样一个常数,如果有这样的常数,对象会直接指向这块内存;如果没有,再实例化Integer。
    因此,上面的代码中three和four指向的是同一块空间

    显然,我们有:

    Integer three = 128;
    Integer four = 128;
    System.out.println(three == four);
    
    • 1
    • 2
    • 3

    false

    对象常量池

    除了floatdouble,其他的都可以用对象常量池。

    也就是说:

    Double d1 = Double.valueOf(100);
    Double d2 = Double.valueOf(100);
    System.out.println(d1 == d2);
    
    • 1
    • 2
    • 3

    输出false

    总结

    在Java中,我们可以通过包装类解决基本数据类型的不具有对象化的能力的问题。
    每一种基本数据类型都有它对应的包装类:
    在这里插入图片描述
    Java中所有的包装类都是存在Java.lang中的。
    我们可以通过装箱和拆箱的操作来实现包装类和基本数据类型的转换。
    我们也可以用包装类来完成基本数据类型和字符串之间的转换。

  • 相关阅读:
    迎战秋招计划
    【Lua 入门基础篇(一)】基本语法&数据类型
    147. SAP UI5 SmartTable 控件的使用介绍
    OpenResty介绍及实现限流
    Qt5中connect信号槽无效问题 C++
    CA:用于移动端的高效坐标注意力机制 | CVPR 2021
    深入理解JVM笔记
    [附源码]Python计算机毕业设计Django教育企业网站
    微信小程序-微信授权登录
    Spring MVC的执行流程
  • 原文地址:https://blog.csdn.net/karshey/article/details/126101289