企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
>[success] # Integer 1. **Integer**作为 **int**包装类,包装了一个**int类型的变量**作为成员变量,主要用于实现对**int类型的包装**并提供**int类型到String类之间的转换**等方法 * 进入**Integer 类**中可以看到内部有一个常量 这个常量int 就是被包装的int 并用其值提供了一些方法 ![](https://img.kancloud.cn/35/27/35271d3815c48250a02b6704635dbd68_632x189.png) * 创建时候构造函数将传入基本变量赋值个了value 常量 ![](https://img.kancloud.cn/8a/ac/8aaca910a83233802c565bb151abe23b_516x139.png) >[danger] ##### 常用的常量 |常量类型和名称 |功能介绍| | --- | --- | |public static final int MAX_VALUE |表示int类型可以描述的最大值,即2^31-1| |public static final int MIN_VALUE| 表示int类型可以描述的最小值,即-2^31| |public static final int SIZE |表示int类型采用二进制补码形式的位数| |public static final int BYTES |表示int类型所占的字节个数| |public static final Class TYPE| 表示int类型的Class实例| ~~~ public class JavaTest { public static void main(String[] args) { // 类方法直接调 System.out.println("最大值是:" + Integer.MAX_VALUE); // 2^31-1 System.out.println("最小值是:" + Integer.MIN_VALUE); // -2^31 System.out.println("所表示二进制的位数是:" + Integer.SIZE); // 32 System.out.println("所占字节的个数是:" + Integer.BYTES); // 4 System.out.println("对应int类型的Class实例是:" + Integer.TYPE); // int } } ~~~ >[danger] ##### 常用的方法 |方法声明 | 功能介绍 | | --- | --- | |Integer(int value) | 根据参数指定的整数来构造对象(已过时) | |Integer(String s) |根据参数指定的字符串来构造对象 (已过时) | |int intValue() |获取调用对象中的整数值并返回 | |static Integer valueOf(int i) |根据参数指定整数值得到Integer类型对象 | |boolean equals(Object obj) |比较调用对象与参数指定的对象是否相等 | |String toString() |返回描述调用对象数值的字符串形式 | |static int parseInt(String s) |将字符串类型转换为int类型并返回 | |static String toString(int i) |获取参数指定整数的十进制字符串形式 | |static String toBinaryString(int i) |获取参数指定整数的二进制字符串形式 | |static String toHexString(int i) |获取参数指定整数的十六进制字符串形式 | |static String toOctalString(int i) |获取参数指定整数的八进制字符串形式 | * 说明 通过**构造函数**方式创建 一个int 包装类已经过时,更多推荐使用**valueOf**创建 ![](https://img.kancloud.cn/33/c9/33c9596e1a552c2017f6a6dd171bd7c0_621x360.png) * 案例 ~~~ package javaTest; public class JavaTest { public static void main(String[] args) { // 推荐使用valueOf Integer it3 = Integer.valueOf(1); Integer it4 = Integer.valueOf("1"); // 通过 intValue 拆包获取int int num = it4.intValue(); System.out.println(it3); // 1 字符串类型 System.out.println 会调用类的toString 方法 等同于it3.toString() System.out.println(num); // 1 数字类型 打印就是基本类型数字1 // --------------128 ------------------------ // Integer类内部 通过静态内部类提供了一个缓存池,范围在-128~127之间,如果超过这个范围 Integer 值都是new出来的新对象 System.out.println(it3 == it4); // true 对象比较是内存地址但是是-128~127之间 因此二者使用是一个指向 System.out.println(it3.equals(it4)); // true 比较内部值是否相同使用equals Integer it5 = Integer.valueOf(128); Integer it6 = Integer.valueOf("128"); System.out.println(it5 == it6); // false 对象比较是内存地址 不同 是-128~127之间 创建了两个新对象 System.out.println(it5.equals(it6)); // true 比较内部值是否相同使用equals // 类型转换 int ic = Integer.parseInt("200"); //int ic = Integer.parseInt("200a"); // 编译ok,运行发生NumberFormatException数字格式异常,因为有字母 System.out.println("字符串转换为整数的结果是:" + ic); // 200 System.out.println("根据参数指定的整数获取对应的十进制字符串是:" + Integer.toString(200)); System.out.println("根据参数指定的整数获取对应的二进制字符串是:" + Integer.toBinaryString(200)); System.out.println("根据参数指定的整数获取对应的十六进制字符串是:" + Integer.toHexString(200)); System.out.println("根据参数指定的整数获取对应的八进制字符串是:" + Integer.toOctalString(200)); } } ~~~ * Integer类内部 通过静态内部类提供了一个缓存池,范围在-128~127之间,如果超过这个范围 Integer 值都是new出来的新对象 ![](https://img.kancloud.cn/b7/f9/b7f9fa00977bed9e477fc98e70970d5d_590x150.png) >[info] ## 装箱和拆箱 1. 自动装箱: 基本数据类型->包装类。对应Integer.valueOf(int i); 2. 自动拆箱:包装类->数据类型。对应Integer.intValue(); ~~~ public class JavaTest { public static void main(String[] args) { // 自动装箱: 基本数据类型->包装类。对应Integer.valueOf(int i); // 自动拆箱:包装类->数据类型。对应Integer.intValue(); Integer it5 = 100; // 直接通过赋值运算符实现自动装箱 int ib = it5; // 直接通过赋值运算符实现自动拆箱 // 装箱案例 Integer[] it = new Integer[5]; it[0] = 1; // 虽然接受的是Integer 类型 但是赋值int 类型时候进行了装箱 // 拆箱案例 Integer it1 = 100; int num = 100; System.out.println(it1 == num); // true 因为做了拆箱实际 运行 it1.intValue()==num /** * 下面代码实际 运行效果 * Integer i = Integer.valueOf(50);//java自动装包 * Integer j = Integer.valueOf(60);//java 自动装包 * System.out.println(i.intValue()+i.intValue());//java 自动拆包 */ Integer i = 50; Integer j = 60; System.out.println(i + j); // 注意 -128 - 127 问题,当Integer i1 = 50 执行时候进行了装箱 // 进行了装箱 执行了Integer.valueOf(50); 因为valueOf 会命中缓存 // 所以 i1 == i2 为true ,i1 == j2 i1会进行拆包,把值转为int类型 因此是true // k3 通过构造创建的因此没有缓存说法 因此i1 == k3 为false Integer i1 = 50; Integer i2 = 50; int j2 = 50; Integer k3 = new Integer(50); System.out.println(i1 == j2);// true System.out.println(i1 == i2);// true System.out.println(i1 == k3);// false } } ~~~ >