Java学习笔记 -八种包装类
包装类存在的意义#
- 前几天的作业stack中:
void push(Object s);
- 调用:push(100),将基本类型传递给了Object,
- 理论上这种语法显然是不对的,基本类型无法传递给引用数据类型
- 实际上,java将100先“包装“成包装类(自动装箱和拆箱),才能实现参数传递的
示例(自己写的包装类):#
package com.javase.integer;
//示例:包装类存在的意义:
public class integerTest01 {
public static void doSome(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
MyInt m = new MyInt(100);
doSome(m);
}
}
//自己模拟包装类
class MyInt{
int value;
public MyInt() {
}
public MyInt(int value) {
this.value = value;
}
@Override
public String toString() {
return "MyInt{" +
"value=" + value +
'}';
}
}
java中的八种包装类#
- byte java.lang.Byte (父类:Number)
- short java.lang.Short (父类:Number)
- int java.lang.Integer (父类:Number)
- long java.lang.Long (父类:Number)
- float java.lang.Float (父类:Number)
- double java.lang.Double (父类:Number)
- boolean java.lang.Boolean (父类:Object)
- char java.lang.Character (父类:Object)
java.lang.Number类下数字包装类的公共方法#
- byte byteValue() 返回指定号码作为值 byte ,这可能涉及舍入或截断。
- abstract double doubleValue() 返回指定数字的值为 double ,可能涉及四舍五入。
- abstract float floatValue() 返回指定数字的值为 float ,可能涉及四舍五入。
- abstract int intValue() 返回指定号码作为值 int ,这可能涉及舍入或截断。
- abstract long longValue() 返回指定数字的值为 long ,可能涉及四舍五入或截断。
- short shortValue() 返回指定号码作为值 short ,这可能涉及舍入或截断。
这些方法为所有数字包装类的子类都有,这些方法是负责拆箱的
包装类的使用示例:#
public class integerTest02 {
public static void main(String[] args) {
//基本数据类型向引用数据类型转换(手动装箱)
Integer i = new Integer(123333);
//引用数据类型向基本数据类型转换(手动拆箱)
float f = i.floatValue();
System.out.println(f);
int retValue = i.intValue();
System.out.println(retValue);
//byte类型的范围:-128~127,所以这里数据会表示错误
byte v = i.byteValue();
System.out.println(v);
//使用类名.的方法访问包装类中的常量
System.out.println("int的最大值: " + Integer.MAX_VALUE);
System.out.println("int的最大值: " + Integer.MIN_VALUE);
System.out.println("Byte的最大值: " + Byte.MAX_VALUE);
}
}
自动拆箱&自动装箱#
- 为了方便包装类的使用,所以有了自动拆箱和自动装箱
- 自动装箱:调用valueOf方法
- 自动拆箱:调用intValue...方法
示例:#
public class integerTest04 {
public static void main(String[] args) {
//自动装箱(常用)
Integer a = 1000;
Integer b = 1000;
Integer x = 127;
Integer y = 127;
//自动拆箱
int value = x;
//==比较还是对象的内存地址,不会触发自动拆箱
System.out.println(a == b); //false
//java为了提高执行效率,将(-128~127)之间的所有对象都提前创建好,放到方法区“整数型常量池”
//所以这个区间不需要new对象了,之间从常量池中取出来就行了
//常量池在类加载时创建:使用静态代码块: static final Integer cache[]
//缓存机制:节约对象创建的时间
System.out.println(x == y); //true
//但是使用了 + 运算符之后,就会触发自动拆箱,从而转换为基本数据类型进行比较
System.out.println(a + x == b + y); //true
}
}
包装类的常用方法#
public class integerTest03 {
public static void main(String[] args) {
//构造方法:Integer(int) or Integer(String)
Integer i1 = new Integer(123);
Integer i2 = new Integer("123");
//将非数字的字符串转换成Integer会抛出异常
//数字格式化异常:java.lang.NumberFormatException
Integer a = new Integer("中文");
System.out.println(a);
//重要方法:parseInt...
//static int parseInt(String s)
//功能:将字符串转换成数值
int retValue = Integer.parseInt("12333");
double retValue2 = Double.parseDouble("3.11");
System.out.println(retValue + retValue2);
//其他方法:toBinaryString
//public static String toBinaryString(int i)
//功能:十进制转换成二进制字符串
//类似的转换成其他进制,看参考手册
System.out.println(Integer.toBinaryString(3));
//valueOf方法作为了解
//static Integer valueOf(int i)
//功能:将int 转化为Integer,有自动装箱,所以几乎不用。
Integer i3 = Integer.valueOf(100);
Integer i4 = Integer.valueOf("100");
System.out.println(i3);
}
}
String Integer int 三种类型间的转换#
示例程序:#
public class integerTest03 {
public static void main(String[] args) {
//(十分重要)String -> int
int retValue = Integer.parseInt("123");
//int -> String
String s = String.valueOf(123);
//int -> Integer
Integer i = 123; //自动装箱
Integer i2 = Integer.valueOf(123);
//Integer -> int
int i3 = i; //自动拆箱
int i4 = i.intValue();
//Integer -> String
String s2 = String.valueOf(i);
//String -> Integer
Integer i5 = new Integer("123");
Integer i6 = Integer.valueOf("123");
}
}
图示#
分类:
Java学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构