博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本类型包装类及编译器优化(常量池)
阅读量:5746 次
发布时间:2019-06-18

本文共 4291 字,大约阅读时间需要 14 分钟。

hot3.png

1.Boolean

/** * @author Aruforce * Booelean 为不可变类,Java实现了 常量池机制。 * 直接赋值'public static Boolean flag1 = true;' 会被优化成  * 'public static Boolean flag1 = Boolean.valueOf(true);'返回一个Boolean的固定地址 */public class TestBoolean {	public static Boolean flag1 = true;//常量池	public static Boolean flag2 = true;//常量池	public static void main(String[] args) {		System.out.println(flag1==flag2);//true		Boolean flag3 = new Boolean(true);//堆内的对象		System.out.println(flag1 == flag3);//false		Boolean flag4 =true;//常量池		System.out.println(flag1 == flag4);//true		flag4 = new Boolean(false);//堆内的对象		System.out.println(flag3 == flag4);//false	}}

2.Byte

/** *  * @author Aruforce * Byte为不可变类,Java为其实现了常量池机制 * 直接赋值'public static Byte b1 = 1' -128-0-127 会被优化成  * 'Byte.valueOf(1)' 返回ByteCache.cache[]里面对应的值 */public class TestByte {	public static Byte b1 = 1;//常量池	public static Byte b2 = 1;//常量池	public static void main(String[] args) {		Byte b3 = 1;		Byte b4 = new Byte((byte)1);		System.out.println(b1 == b2);//true		System.out.println(b1 ==b3);//true		System.out.println(b1==b4);//false	}}

3.Charactor

/** *  * @author Aruforce * Character 为不可变类,Java为(Character c int值在127以下时)实现了常量池机制  * 直接赋值'public static Character character1 = 'A' 被编译器优化为 * 'public static Character character1 = Character.valueOf('A')' *  */public class TestCharactor {	public static Character character1 = 'A';	public static Character character2 = 'A';	public static Character character11 = '中';	public static void main(String[] args) {		Character character3 = 'A';		Character character4 = new Character('A');		System.out.println(character1 == character2);//true		System.out.println(character1 == character3);//true		System.out.println(character1 == character4);//false		Character character12 = '中';		Character character13 = new Character('中');		System.out.println(character11 == character12);//false		System.out.println(character12 == character13);//false	}}

4.Double

/** *  * @author Aruforce * Double 是不可变类,但是Java未实现常量池机制 * public static Double d1 = 1.0 优化为 public static Double d1 = Double.valueOf(1.0D); * 实际上也是调用 new Doubel(); */public class TestDouble {	public static Double d1 = 1.0;	public static Double d2 = 1.0;	public static void main(String[] args) {		Double d3 = 1.0;		Double d4 = new Double(1.0);		System.out.println(d1 == d2);//false		System.out.println(d1 == d3);//false		System.out.println(d1 == d4);//false	}}

5.Float

/** *  * @author Aruforce * Float 是不可变类,但是Java未实现常量池机制,显然数值类型的也不需要 * public static Float f1 = 1.0f; 优化为 public static Float f1 = Float .valueOf(1.0f); * 实际上也是调用 new Float(); */public class TestFloat {	public static Float f1 = 1.0f;	public static Float f2 = 1.0f;	public static void main(String[] args) {		Float f3 = 1.0f;		Float f4 = new Float(1.0f);		System.out.println(f1 == f2);//false		System.out.println(f1 == f3);//false		System.out.println(f1 == f4);//false	}}

6.Integer

/** *  * @author Aruforce * {@link Integer} 是不可变类,Java为介于-128-0-127的实现了常量池 * public static Integer i1 = 127;被编译器优化为 * public static Integer i1 = Integer.valueOf(1); */public class TestInteger {	public static Integer i1 = 127;	public static Integer i2 = 127;	public static void main(String[] args) {		Integer i3 = 127;		Integer i4 = new Integer(127);		System.out.println(i1 == i2);// true		System.out.println(i1 == i3);// true		System.out.println(i1 == i4);// false	}}

7.Long

/** *  * @author Aruforce * {@link Long} 是不可变类,Java为介于-128-0-127的实现了常量池 * public static Long i1 = 127;被编译器优化为 * public static Long i1 = Long.valueOf(1); */public class TestLong {	public static Long l1 = 127l;	public static Long l2 = 127l;	public static void main(String[] args) {		Long l3 = 127l;		Long l4 = new Long(127l);		System.out.println(l1 == l2);// true		System.out.println(l1 == l3);// true		System.out.println(l1 == l4);// false	}}

8.Short

/** *  * @author Aruforce * {@link Short} 是不可变类,Java为介于-128-0-127的实现了常量池 * public static Short i1 = 127;被编译器优化为 * public static Short i1 = Short.valueOf(1); */public class TestShort {	public static Short s1 = 127;	public static Short s2 = 127;	public static void main(String[] args) {		Short s3 = 127;		Short s4 = new Short((short)127);		System.out.println(s1 == s2);// true		System.out.println(s1 == s3);// true		System.out.println(s1 == s4);// false	}}

转载于:https://my.oschina.net/Aruforce/blog/1615442

你可能感兴趣的文章
工作中如何做好技术积累
查看>>
怎么用sysLinux做U盘双PE+DOS??
查看>>
Spring Transactional
查看>>
shell脚本实例
查看>>
我的友情链接
查看>>
Windows Phone 7 隔离存储空间资源管理器
查看>>
Microsoft Excel 2000/2003修复工具
查看>>
apache安装报错undefined reference ssl
查看>>
关于爱情只有一句忠告
查看>>
CentOS 7下安装部署Oracle11g图文教程
查看>>
F#初学笔记06
查看>>
实战:将企业域名解析委派给企业DNS服务器
查看>>
在Lync 2013环境部署Office Web Apps
查看>>
微软大会Ignite,你准备好了么?
查看>>
读书笔记-高标管事 低调管人
查看>>
Master带给世界的思考:是“失控”还是进化
查看>>
用户和开发者不满苹果iCloud问题多多
查看>>
java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
查看>>
我的工具:文本转音频文件
查看>>
【许晓笛】从零开始运行EOS系统
查看>>