Java学习笔记(1)-- 类型+常量优化机制

Java学习笔记(1)—— 类型+常量优化机制

基本知识

  • 使用javac命令将.java文件编译为.class文件,再使用java命令使.class文件在JVM中运
  • byte、short、char的变量在运算的时候都会先转化为int型再运算,其结果也是int型,所以需要进行强制类型转换

常量优化机制

1. byte、short、char常量的优化机制

  1. 判断表达式是否全是常量
  2. 表达式的运算结果是否在该数据类型的取值范围内,如果是直接赋值,否则报错

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

posted @   范特xin  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示