【JAVA】笔记(9)--- 装箱与拆箱;整数型常量池;String为什么是不可变的;StringBuilder / StringBuffer 为什么是可变的?
楔子:
我们需要向一个方法的形参里传一个数字,但是这个方法的形参类型是 Object ,怎么办?
8种基本数据类型对应的包装类型:
byte —> Byte
short —> Short
int —> Integer
long —> Long
float —> Float
double —> Double
boolean —> Boolean
char —> Character
装箱与拆箱:
1.概念:装箱 --- 基本数据类型 -->引用数据类型 ; 拆箱 --- 引用数据类型 -->基本数据类型 ;
2. 栗子老师:(以 Integer 为例)
public class pra {
public static void main(String[] args) {
//装箱:
Integer i=new Integer(100);
//拆箱:
int j=i.intValue();
System.out.println(j);
}
}
运行结果:
--------------------------
100
Process finished with exit code 0
3.自动装箱与自动拆箱:
1)概念:自从 java 5 之后,引入了这个新特性 --- 自动装箱与自动拆箱,如同字面意思,基本数据类型与引用数据类型的转换不需要再调用方法来执行了;
2)什么时候会触发自动装箱或自动拆箱 ?
栗子老师:
public class pra {
public static void main(String[] args) {
Integer i=100;//自动装箱
int j=i;//自动拆箱
Integer a=1;//自动装箱
System.out.println(a+1);// + 触发自动拆箱
System.out.println(a-1);// - 触发自动拆箱
System.out.println(a*1);// * 触发自动拆箱
System.out.println(a/1);// / 触发自动拆箱
}
}
运行结果:
----------------------
2
0
1
1
Process finished with exit code 0
整数型常量池:
1.概念:java 中为了提高程序的执行效率,将 [ -128 , 127 ] 之间所有的整数包装对象提前创建好,放到了方法区的整数型常量池中了,所以只要用到这个区间内的整数数据,就不需要再new了,直接从整数型常量池中取出来就行;
2.理解:所以说整数型常量池中的 256 个整数,是在类加载时就创建好的,无论用不用的到,这 256 个对象都是存在的,这种机制也叫做 cache 缓存机制;缓存机制的优点是效率高,缺点是耗费内存;
3.栗子老师:
public class pra {
public static void main(String[] args) {
//a,b指向的 127 是类加载时,在方法区的整数型常量池中创建的,且均为127,所以a,b储存的地址是相同的
Integer a=127;
Integer b=127;
System.out.println(a==b);
//因为128不在整数型常量池中,所以c,d储存的地址指向的分别是在堆内存中new出来的俩个对象,所以a,b储存的地址不同
Integer c=128;
Integer d=128;
System.out.println(c==d);
}
}
运行结果:
------------------------
true
false
Process finished with exit code 0
int,Integer,String 间的类型转换:
随笔:
1. String为什么是不可变的 ?
第一,我看过源代码, String类中有一个byte [ ] 数组,这个数组采用了final修饰,所以此数组一旦创建长度不可变;
第二,并且被final 修饰的引用,指向某个对象之后,不可再指向其它对象;
2、StringBuilder / StringBuffer 为什么是可变的呢?
我看过源代码, StringBuffer / StringBuilder 内部实际上是一个byte [ ] 数组,且数组没有被final修饰,;数组的初始化容量是16,当存满之后会进行扩容,底层调用了数组拷贝的方法 System . arraycopy ( ) 是这样扩容的,所以StringBuilder / StringBuffer 适合于字符串的频繁拼接操作;所以综上,...可变。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术