写点什么

Java 常用类——包装类 小白版个人推荐

  • 2024-10-18
    福建
  • 本文字数:2323 字

    阅读完需:约 8 分钟

包装类及自动装箱/拆箱


包装类是将 Java 中的八种基本数据类型封装成的类,所有数据类型都能很方便地与对应的包装类相互转换,以解决应用中要求使用数据类型,而不能使用基本数据类型的情况。


复制代码


int a = 10; //基本类型的数据Integer b = new Integer(10); //包装类表示的数据
复制代码


包装类的特点


  • 所有包装类都是 final 类型(不能派生子类);

  • 实例化包装类对象后,对象中保存的基本类型数据不能再改变;

  • 包装类封装大量有用的方法(如数据类型转换、判断大小写、最大值、最小值等);

  • 除 Character 类和 Boolean 类继承于 Object 类,其他的包装类都继承于 Number 类。


基本数据类型和包装类



包装类的共同点


1、包装类中包含的值不改变( 包装类实例化后不能修改保存的值 );


2、包装类有两个构造器

  • Integer(int value) ---指定 int 值的构造对象

  • Integer(String s) ---指定 String 值的构造对象


3、包装类中都有 xxxValue()方法

  • int intValue() ---返回包装类对象的 int 值

  • float floatValue() ---返回包装类对象的 float 值


4、包装类中都有两个 ValueOf()方法

  • static Integer valueOf(int i) ---指定 int 值的 Integer 实例

  • static Integer valueOf(String s) ---指定 String 值的 Integer 实例


自动装箱和拆箱


自动装箱和自动拆箱是基本数据类型与包装类之间的转换机制(通过编译器自动完成)基本数据类型 ---自动装箱--->包装类;包装类 ---自动拆箱 --->基本数据类型。例:以 int 类型和 Integer 类型为例


public class Test01 {    public static void main(String[] args) {        // 自动装箱 int -> Integer        int i = 10;        Integer integer1 = i;        System.out.println(integer1);
//自动拆箱 Integer -> int int j = 20; Integer integer2=j; int k = integer2; System.out.println(j); }}
复制代码


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


例:以 Integer 和 String 为例


public class Test03 {    public static void main(String[] args) {        //包装类Integer -> String        Integer i = 100; //自动装箱        //方式1        String str1 = i+"";        //方式2 调用Integer的toString()方法        String str2 = i.toString();        //方式3 调用静态方法String.valueOf()        String str3 =String.valueOf(i);
System.out.println(str1); System.out.println(str2); System.out.println(str3);
//String -> 包装类Integer String str4 = "123"; //方式1 调用包装类的parseXXX()方法 Integer i2 = Integer.parseInt(str4);//自动拆箱 //方式2 Integer i3 = new Integer(str4); //构造器
System.out.println(i2); System.out.println(i3);
}}
复制代码


例题 1:以下两个题目输出结果相同吗?为什么?


Object obj1 = true?new Integer(1):new Double(2.0); //三元运算符(是一个整体)System.out.println(obj1);//运行结果 // 三元运算符是一个整体,精度最高的是double,所以结果是1.01.0
复制代码


Object obj2;if(true){    obj2 = new Integer(1);}else{    obj2 = new Double(2.0);}System.out.println(obj2);//运行结果//if、else是分别独立的语句,是什么输出什么1
复制代码


例题 2(Integer 类):


public class Test04 {    public static void main(String[] args) {        Integer i1 = new Integer(10);        Integer i2 = new Integer(10);        System.out.println(i1 == i2); // false (判断i1和i2是否指向同一个对象)        System.out.println(i1.equals(i2)); // true
Integer j1 = 20; //底层 Integer.valueOf(20) {-128~127}直接返回对象引用,否则创建新的对象new Integer() Integer j2 = 20; //底层 Integer.valueOf(20) System.out.println(j1 == j2); // true
Integer k1 = 128; //超出{-128~127}范围,创建新的对象new Integer() Integer k2 = 128; System.out.println(k1 == k2); // false (判断k1和k2是否指向同一个对象) }}
复制代码


例题 3(Integer):


public class Test05 {    public static void main(String[] args) {        Integer i1 = new Integer(127);        Integer i2 = new Integer(127);        System.out.println(i1 == i2); // false i1和i2是两个不同的对象
Integer i3 = new Integer(128); Integer i4 = new Integer(128); System.out.println(i3 == i4); // false i3和i4是两个不同的对象
Integer i5 = 127; //底层Integer.valueOf(127) Integer i6 = 127; System.out.println(i5 == i6); // true
Integer i7 = 128; //底层new Integer(128) Integer i8 = 128; System.out.println(i7 == i8); // false 同i3和i4
Integer i9 = 127; Integer i10 = new Integer(127); System.out.println(i9 == i10); // false
int a1 = 127; Integer b1 = 127; System.out.println(a1 == b1); // true 只要有基本数据类型,判断的是值是否相等,不管是int还是Integer
int a2 = 128; Integer b2 = 128; System.out.println(a2 == b2); // true 同上
}}
复制代码


很多知识来源于韩顺平 Java 课程,讲的非常好,非常详细,感兴趣的同学可以去学习。如有错误,请大家批评指正,共同进步。


文章转载自:椰椰210162701037

原文链接:https://www.cnblogs.com/wmshun/p/18368279

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Java常用类——包装类 小白版个人推荐_Java_不在线第一只蜗牛_InfoQ写作社区