Java学习笔记(1)-- 类型+常量优化机制
Java学习笔记(1)—— 类型+常量优化机制
基本知识
- 使用javac命令将.java文件编译为.class文件,再使用java命令使.class文件在JVM中运
- byte、short、char的变量在运算的时候都会先转化为int型再运算,其结果也是int型,所以需要进行强制类型转换
常量优化机制
1. byte、short、char常量的优化机制
- 判断表达式是否全是常量
- 表达式的运算结果是否在该数据类型的取值范围内,如果是直接赋值,否则报错
2. String常量的优化机制
String的常量会储存在一个常量池中,如果将一个常量值或者只包含常量的表达式赋值给一个String对象,那么这个String对象就是该常量的引用
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //return true
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2); //return true
String+基本类型也会被当成常量表达式来处理
String a = "a1";
String b = "a" + 1;
System.out.println((a == b)); //result true
String a = "atrue";
String b = "a" + true;
System.out.println((a == b)); //result true
String a = "a3.4";
String b = "a" + 3.4;
System.out.println((a == b)); //result true
String+变量是不可以的
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s3 == s2);
这里我们还可以拓展一下,把s1前面加final修饰符修改为常量看看
final String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s2 == s3);
输出的结果居然变成了true,看来只要是进入常量池的常量,就有可能存在常量优化机制
private static String getS() {
return "b";
}
String s1 = "abc";
String s2 = "a"+getS();
System.out.println((s1 == s2)); //return false
运行原理:编译器发现s2值是要调用函数才能计算出来的,是要在运行时才能确定结果的,所以编译器就设置为运行时执行到String s3=“a” + getS();时 要重新分配内存空间,导致s2和s1是指向两个不同的内存地址,所以==比较结果为false;
参考博文:Java中的常量优化机制 https://blog.csdn.net/weixin_43465312/article/details/102640123
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix