当前位置: 首页 > web >正文

【Java基础|第十八篇】面向对象(八)——包装类

(四)面向对象

(10)包装类:
(10.1)为什么要有包装类?

        Java是面向对象的语言,通过对象调用方法和属性来解决问题     

        而我们的基本数据类型只是一些简单的数字和字母,不是对象,不能调用方法和属性,功能有限。

(10.2)概念

        基于基本数据类型,把这八种基本类型的数据,包装成对应的类类型,这时候就变成对象了,就可以调用方法了或者访问属性了。

(10.3)各类型对应的包装类:   
(10.4)Integer中的一些常用方法:

        Integer 类提供了多个 toString () 方法,用于将整数转换为字符串表

  • public static String toString(int i)

    • 作用:将 int 类型的整数转换为对应的字符串

    • 返回值:表示该整数的 String 对象

    • 调用者:静态方法,通过 Integer 类直接调用

    • 示例:Integer.toString(123) → "123"

  • public static String toString(int i, int radix)

    • 作用:将 int 类型的整数按指定基数(进制)转换为字符串

    • 返回值:表示该整数在指定进制下的 String 对象

    • 调用者:静态方法,通过 Integer 类直接调用

    • 示例:Integer.toString(10, 2) → "1010"(十进制 10 转二进制)

  • public String toString()

    • 作用:将当前 Integer 对象的值转换为字符串

    • 返回值:表示该对象值的 String 对象

    • 调用者:Integer 类的实例对象

    • 示例:new Integer(456).toString() → "456"

         sum 方法

  • 方法定义:public static int sum(int a, int b)

  • 作用:计算两个 int 类型整数的和

  • 返回值:两个参数相加的结果(int 类型)

  • 调用者:静态方法,通过 Integer 类直接调用

  • 示例:Integer.sum(3, 5) → 8

         max 方法

  • 方法定义:public static int max(int a, int b)

  • 作用:比较两个 int 类型整数,返回较大的值

  • 返回值:两个参数中较大的那个 int 值

  • 调用者:静态方法,通过 Integer 类直接调用

  • 示例:Integer.max(3, 5) → 5

        parseInt 方法(重点掌握)

  • 方法定义 1:public static int parseInt(String s)

    • 作用:将字符串参数解析为十进制的 int 值

    • 返回值:解析后的 int 类型数值

    • 调用者:静态方法,通过 Integer 类直接调用

    • 示例:Integer.parseInt("123") → 123

  • 方法定义 2:public static int parseInt(String s, int radix)

    • 作用:将指定基数(进制)的字符串参数解析为 int 值

    • 返回值:解析后的 int 类型数值

    • 调用者:静态方法,通过 Integer 类直接调用

    • 示例:Integer.parseInt("1010", 2) → 10(二进制 "1010" 转十进制)

        equals 方法

  • 方法定义:public boolean equals(Object obj)

  • 作用:比较当前 Integer 对象与指定对象是否相等(值相等)

  • 返回值:如果两个对象的值相等则返回 true,否则返回 false

  • 调用者:Integer 类的实例对象

  • 示例:

    Integer a = new Integer(10);
    Integer b = new Integer(10);
    a.equals(b) → true
    

  • 注意:equals () 方法比较的是对象的值,而==比较的是对象的引用(对于基本类型则比较值)

基础案例:

public class Test042_Integer {public static void main(String[] args) {int i = 1;//编译报错,因为i不是对象//i.toString();//1.int --> Integer//Integer o = new Integer(i);Integer o = Integer.valueOf(1);//2.Integer --> intint j = o.intValue();System.out.println(o.toString());//3.包装类静态成员访问System.out.println(Integer.MIN_VALUE);System.out.println(Integer.MAX_VALUE);//4.包装类静态方法调用//把100分别转为十进制、二进制、八进制、十六进制的字符串形式System.out.println(Integer.toString(100));System.out.println(Integer.toString(100,2));System.out.println(Integer.toString(100,8));System.out.println(Integer.toString(100,16));//把100转为二进制形式System.out.println(Integer.toBinaryString(100));//把字符串"100"转为int类型的100int num = Integer.parseInt("100");System.out.println(num);}
}
(10.5)各包装类常用方法总结:

        所有包装类共有的方法,所有包装类都继承自Object,并实现了Comparable接口,因此拥有以下通用方法:

  • toString():将包装类对象转换为字符串(如Integer.toString(123)返回"123")。

  • equals(Object obj):比较两个包装类对象的值是否相等(注意与==的区别,==比较地址,equals比较值)。

  • compareTo(T o):比较两个对象的大小(实现Comparable接口的方法,返回负数、0、正数表示小于、等于、大于)。

  • hashCode():返回对象的哈希码(通常与值相关)。

  • valueOf(基本类型):将基本类型转换为包装类对象(推荐使用,可能复用缓存对象)。

        数值型包装类,数值型包装类(ByteShortIntegerLongFloatDouble)提供了大量与数值处理相关的方法:

(1)类型转换

  • parseXxx(String s):将字符串转换为对应的基本类型(如Integer.parseInt("123")返回int类型的 123;Double.parseDouble("3.14")返回double的 3.14)。
    注意:若字符串格式不正确,会抛出NumberFormatException

  • valueOf(String s):将字符串转换为包装类对象(如Integer.valueOf("123")返回Integer对象)。

(2)常量

  • MIN_VALUE/MAX_VALUE:表示对应基本类型的最小值和最大值(如Integer.MIN_VALUE-2^31Double.MAX_VALUE是最大的双精度值)。

  • TYPE:表示对应的基本类型的Class对象(如Integer.TYPE等价于int.class)。

(3)进制转换

  • toBinaryString(int i):将整数转换为二进制字符串(IntegerLong特有)。

  • toOctalString(int i):转换为八进制字符串。

  • toHexString(int i):转换为十六进制字符串(字母小写)。

  • toString(int i, int radix):将整数转换为指定进制(radix,2~36)的字符串。

(4)其他常用方法

  • intValue()/longValue()/doubleValue()等:将包装类对象转换为对应的基本类型(拆箱操作)。

  • compare(int x, int y):静态方法,比较两个基本类型值的大小(如Integer.compare(3, 5)返回-1)。

  • sum(int a, int b)Integer特有):返回两数之和(Java 8+)。

        Character(字符包装类)

Character用于封装char类型,提供字符判断和转换的方法:

  • isLetter(char c):判断是否为字母(a-z 或 A-Z)。

  • isDigit(char c):判断是否为数字(0-9)。

  • isWhitespace(char c):判断是否为空白字符(空格、制表符\t、换行符\n等)。

  • isUpperCase(char c)/isLowerCase(char c):判断是否为大写 / 小写字母。

  • toUpperCase(char c)/toLowerCase(char c):将字符转换为大写 / 小写。

  • valueOf(char c):将char转换为Character对象。

        Boolean(布尔包装类)

Boolean封装boolean类型,方法较少但常用:

  • parseBoolean(String s):将字符串转换为boolean(忽略大小写,仅当字符串为"true"时返回true,其他均为false)。

  • valueOf(String s)/valueOf(boolean b):返回Boolean对象(truefalse)。

  • 常量:TRUE(表示true的对象)、FALSE(表示false的对象)、TYPEboolean.class)。

这些方法了解一下即可,最常用的是Integer中的那些,以及各基本数据类型与包装类型的转换。

(10.6)装箱与拆箱
概念;

        JDK1.5或以上,可以支持基本类型和包装类型之间的自动装箱、自动拆箱,这简化了基本类型和包装类型之间的转换。

        自动装箱:基本数据类型值 自动转化为 包装类对象

        自动拆箱:包装类对象 自动转化为 基本数据类型值

//手动装箱
Integer o = new Integer(1);
//自动装箱
Integer o = 1;//手动拆箱
int i = o.intValue();
//自动拆箱
int i = o;
注意:

        使用基本类型和包装类时,要考虑隐式类型转换。(不支持小转大)

        不同类型的基本数据类型和包装类,是不可以自动装箱拆箱的,例如int和Long。

基础案例:

public class Test043_Test {public void test1(int i) {}public void test2(Integer i) {}public void test3(long i) {}public void test4(Long i) {}public static void main(String[] args) {Test043_Test t=new Test043_Test();t.test1(1);// 编译通过 int i = 1; 正常赋值t.test2(1);// 编译通过 Integer i = 1; 自动装箱t.test3(1);// 编译通过 long i = 1; 隐式类型转换// 编译报错// 错误的代码:Long i = 1;// int和Long 之间没有任何关系//t.test4(1);t.test4(1L);// 编译通过 Long i = 1L; 自动装箱}
}
特殊情况: Integer缓冲区

运行时常量池(Runtime Constant Pool:用于存储编译期间生成的各种字面量和符号引用,Integer常量池就存在运行时常量池里面。

Integer常量池是一个特殊的缓存机制,用于存储在范围 [-128, 127] 之间的Integer常量对象。这个范围是Java中的一个固定范围,超出这个范围的整型常量不会被缓存。

作用:通过复用对象可以节省内存空间和提高性能

触发的条件:采用自动装箱,将整数值给一个Integer对象

                      整数值在[-128,127]之间

结果:常量池为该数值已经分配了固定的地址,此时会将常量池中的地址作为他的引用地址,不会创建新的对象

基础案例:

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
//获取这两个对象的地址
System.out.println("i1: " + System.identityHashCode(i1));
System.out.println("i2: " + System.identityHashCode(i2));
System.out.println("i1 == i2: "+ (i1 == i2));//false
System.out.println("--------------");Integer i3 = 127;
Integer i4 = 127;
System.out.println("i3: " + System.identityHashCode(i3));
System.out.println("i4: " + System.identityHashCode(i4));
System.out.println("i1 == i3: "+ (i1 == i3));//false
System.out.println("i3 == i4: "+ (i3 == i4)); //true  //放在了常量池里
System.out.println("--------------");Integer i5 = 128;
Integer i6 = 128;
System.out.println("i5: " + System.identityHashCode(i5));
System.out.println("i6: " + System.identityHashCode(i6));
System.out.println("i5 == i6: "+ (i5 == i6));//false  //超出范围

http://www.xdnf.cn/news/17821.html

相关文章:

  • Docker安装influxdb以及python基本操作
  • 微店平台平台关键字搜索接口实战:从精准检索到智能推荐实现
  • JetPack系列教程(六):Paging——让分页加载不再“秃”然
  • 职场与生活如何在手机中共存?(二)
  • aliases 的意义和作用?
  • Harmony OS 开发入门 第三章
  • 四、深入剖析Java程序逻辑控制:从字节码到性能优化
  • Android 双屏异显技术全解析:从原理到实战的多屏交互方案
  • sqli-libs通关教程(51-65)
  • Linux系统编程Day13 -- 程序地址空间(进阶)
  • 18.9 BERT问答模型实战:从数据到部署的完整指南
  • dolphinscheduler 依赖节点不通过
  • 【Spring Boot 3.0 + JDK 17 新手指南:完整用户管理系统】
  • ADB 无线调试连接(Windows + WSL 环境)
  • AI一周事件(2025年8月6日-8月12日)
  • 字符串匹配算法
  • 深度学习——03 神经网络(3)-网络优化方法
  • cisco无线WLC flexconnect配置
  • latex中“itemize”
  • 了解 Linux 中的 /usr 目录以及 bin、sbin 和 lib 的演变
  • 肖臻《区块链技术与应用》第十一讲:比特币核心概念重温:一文读懂私钥、交易、挖矿与网络现状
  • 深入解析 AUTOSAR:汽车软件开发的革命性架构
  • Qt中定时器介绍和使用
  • 什么是跨域访问问题,如何解决?
  • 企业高性能web服务器(3)
  • cartographer 后端优化流程
  • 终端安全检测与防御技术
  • MySQL 存储过程终止执行的方法
  • [TryHackMe]Internal(hydra爆破+WordPress主题修改getshell+Chisel内网穿透)
  • MyBatis 缓存与 Spring 事务相关笔记