Double Integer

本文深入探讨了Java中Double和Integer对象的比较原理,解释了为何相同数值的Double对象使用==进行比较时返回false,而Integer对象在一定范围内比较返回true的现象。通过字节码分析,揭示了对象创建与比较背后的机制。

Double d=2.0;
Double d1=2.0;
Double d2=3.0;
Double d3=1111.0;
System.out.println(d==d1);//false

Integer i=1;
Integer i1=1;
Integer i2=new Integer(1111);//
System.out.println(i==i1);//true



要搞清为什么这么输出,得看字节码


// 0 0:ldc2w #2 <Double 2D>
// 1 3:invokestatic #4 <Method Double Double.valueOf(double)>
// 2 6:astore_1
// 3 7:ldc2w #2 <Double 2D>//从常量池中得到Double
// 4 10:invokestatic #4 <Method Double Double.valueOf(double)>
//通过Double.valueOf得到了Double对象!所以虽然树值一样!但不是一个对象!
// 5 13:astore_2
// 6 14:ldc2w #5 <Double 3D>
// 7 17:invokestatic #4 <Method Double Double.valueOf(double)>
// 8 20:astore_3
// 9 21:ldc2w #7 <Double 1111D>
// 10 24:invokestatic #4 <Method Double Double.valueOf(double)>
// 11 27:astore 4
// 12 29:getstatic #9 <Field PrintStream System.out>
// 13 32:aload_1
// 14 33:aload_2
// 15 34:if_acmpne 41
// 16 37:iconst_1
// 17 38:goto 42
// 18 41:iconst_0
// 19 42:invokevirtual #10 <Method void PrintStream.println(boolean)>
// 20 45:iconst_1
// 21 46:invokestatic #11 <Method Integer Integer.valueOf(int)>
// 22 49:astore 5
// 23 51:iconst_1
// 24 52:invokestatic #11 <Method Integer Integer.valueOf(int)>
// 25 55:astore 6
// 26 57:new #12 <Class Integer>
// 27 60:dup
// 28 61:sipush 1111
// 29 64:invokespecial #13 <Method void Integer(int)>
// 30 67:astore 7
// 31 69:getstatic #9 <Field PrintStream System.out>
// 32 72:aload 5
// 33 74:aload 6
// 34 76:if_acmpne 83
// 35 79:iconst_1
// 36 80:goto 84
// 37 83:iconst_0
// 38 84:invokevirtual #10 <Method void PrintStream.println(boolean)>
// 39 87:getstatic #9 <Field PrintStream System.out>
// 40 90:aload 7
// 41 92:aload 6
// 42 94:if_acmpne 101
// 43 97:iconst_1
// 44 98:goto 102
// 45 101:iconst_0
// 46 102:invokevirtual #10 <Method void PrintStream.println(boolean)>
// 47 105:return


double d4=3.0;

如果class文件中只有这一句
看字节码

// 0 0:ldc2w #2 <Double 5D>
// 1 3:dstore_1
// 2 4:return

而Integer对象-127-128是在常量池中!
Integer i=1;
字节码是

//Integer integer = Integer.valueOf(1);
// 2 4:iconst_1
// 3 5:invokestatic #4 <Method Integer Integer.valueOf(int)>



当Integer i=200
则会打印出false;
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值