当前位置: 首页 > news >正文

网站做404wordpress微信分享二维码生成

网站做404,wordpress微信分享二维码生成,买个网站空间,一般通过饼干什么是自动装箱和自动拆箱#xff0c;原理是什么#xff1f; 自动装箱和自动拆箱是Java编程语言中的两个重要概念#xff0c;它们涉及到基本数据类型与其对应包装类之间的自动转换。 一、定义 自动装箱#xff1a;是指Java编译器在需要将基本数据类型转换为对应的包装类…什么是自动装箱和自动拆箱原理是什么 自动装箱和自动拆箱是Java编程语言中的两个重要概念它们涉及到基本数据类型与其对应包装类之间的自动转换。 一、定义 自动装箱是指Java编译器在需要将基本数据类型转换为对应的包装类时会自动进行转换的过程。例如将int类型转换为Integer类型将double类型转换为Double类型等。 自动拆箱则是自动装箱的逆过程即Java编译器在需要将包装类对象转换为对应的基本数据类型时会自动进行转换。例如将Integer类型转换为int类型将Double类型转换为double类型等。 二、原理 自动装箱当基本数据类型被赋值给一个包装类对象时编译器会自动生成一个调用对应包装类构造函数的代码。这种转换是通过包装类的构造函数或静态工厂方法例如Integer.valueOf(int i)实现的。 自动拆箱当包装类对象被赋值给基本数据类型时编译器会自动生成一个调用包装类的xxxValue()方法的代码以获取基本数据类型的值。这种转换是通过包装类提供的xxxValue()方法实现的其中xxx表示基本数据类型如intValue、doubleValue等。 三、例子 自动装箱 int num 5; Integer numObj num; // 自动装箱编译器会将int类型的num自动转换为Integer类型的numObj 在这个例子中编译器将int类型的num自动转换为Integer类型的numObj。自动拆箱 Integer numObj 10; int num numObj; // 拆箱编译器会将Integer类型的numObj自动转换为int类型的num 在这个例子中编译器将Integer类型的numObj自动转换为int类型的num。 另外自动装箱和拆箱在Java集合框架如ArrayList中尤为重要因为这些框架只能存储对象而不能存储基本数据类型。例如 ArrayListInteger list new ArrayList(); list.add(10); // int 10 被自动装箱为 Integer 对象 int value list.get(0); // Integer 对象被自动拆箱为 int 基本类型 在这个例子中list.add(10)将int类型的10自动装箱为Integer对象然后list.get(0)将Integer对象自动拆箱为int基本数据类型。 举例 Integer i 10; //装箱 int n i; //拆箱 上面这两行代码对应的字节码为 L1LINENUMBER 8 L1ALOAD 0BIPUSH 10INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;PUTFIELD AutoBoxTest.i : Ljava/lang/Integer;L2LINENUMBER 9 L2ALOAD 0ALOAD 0GETFIELD AutoBoxTest.i : Ljava/lang/Integer;INVOKEVIRTUAL java/lang/Integer.intValue ()IPUTFIELD AutoBoxTest.n : IRETURN 从字节码中我们发现装箱其实就是调用了 包装类的valueOf()方法拆箱其实就是调用了 xxxValue()方法。 因此 Integer i 10 等价于 Integer i Integer.valueOf(10)int n i 等价于 int n i.intValue(); 注意如果频繁拆装箱的话也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。 private static long sum() {// 应该使用 long 而不是 LongLong sum 0L;for (long i 0; i Integer.MAX_VALUE; i)sum i;return sum; } 总的来说自动装箱和自动拆箱机制使得Java语言的基本数据类型与对象之间的转换变得更加简单和高效。然而在使用时也需要注意其潜在的问题如性能开销和可能的空指针异常等。因此在编写代码时应尽量避免在循环或大量计算中自动装箱如果可能手动进行装箱操作以减少不必要的开销。 什么浮点数运算的时候会有精度丢失的风险 浮点数运算时会有精度丢失的风险这主要源于浮点数在计算机中的表示方式及其运算特性。以下是对这一现象的详细解释 一、浮点数的表示方式 二进制系统计算机内部使用二进制系统来存储和处理数据。然而许多十进制小数在转换为二进制时无法得到一个有限长度的循环小数或终止小数例如十进制的0.1在二进制中就是无限循环小数。 IEEE 754标准浮点数在计算机中通常采用IEEE 754标准进行表示该标准定义了浮点数的编码格式包括符号位、指数部分和尾数部分。其中尾数的位数是有限的这意味着浮点数只能精确地表示一定数量的小数位数。 二、精度丢失的原因 有限位数由于浮点数的尾数位数有限因此无法精确表示所有的十进制小数。当小数位数超过尾数的表示范围时就会发生精度丢失。 舍入误差在浮点数运算过程中由于数值的内部表示不精确运算结果也需要进行舍入处理以适应浮点数的存储格式。这种舍入误差会随着多次运算的累积而逐渐增大最终导致精度丢失。 二进制与十进制的不匹配由于二进制和十进制之间的不匹配某些十进制小数在二进制中无法精确表示这也会导致精度丢失。 三、精度丢失的影响 计算误差精度丢失会导致计算结果与期望结果之间存在误差。这种误差在多次运算后会逐渐累积最终影响结果的准确性。 比较问题由于浮点数的精度问题直接比较两个浮点数是否相等通常是不可靠的。即使两个浮点数的值在视觉上非常接近它们在底层的二进制表示中也可能存在微小差异。 四、应对措施 使用BigDecimal类在需要高精度计算的场景中可以使用Java中的BigDecimal类来代替浮点数进行运算。BigDecimal类可以精确表示小数并且允许开发者控制舍入模式从而避免浮点数的精度问题。 引入误差容忍度在比较两个浮点数时可以引入误差容忍度也称为epsilon即允许两个浮点数的差值在某个很小的范围内视为相等。这样可以避免直接比较浮点数时产生的误差。 选择合适的数值类型根据实际需求选择合适的数值类型如float、double或BigDecimal。在可能的情况下优先选择精度更高的数值类型以减少精度丢失的风险。 综上所述浮点数运算时会有精度丢失的风险这主要源于浮点数的表示方式和运算特性。为了降低这种风险可以采取相应的应对措施来确保计算的准确性。 如何解决浮点数运算的精度丢失问题 浮点数运算的精度丢失问题在计算机科学中是一个普遍存在的挑战源于二进制无法精确表示某些十进制小数以及运算过程中的舍入误差。以下是一些解决浮点数运算精度丢失问题的方法 一、使用整数进行计算 原理 将浮点数转换为整数进行计算可以避免浮点数表示不精确的问题。通过放大或缩小数值的倍数如乘以10的幂将浮点数转换为整数进行计算然后再将结果转换回浮点数。 function multiply(a, b) { const multiplier 10000; // 选择一个合适的倍数如10000 const intA a * multiplier; const intB b * multiplier; return (intA * intB) / (multiplier * multiplier); } 二、使用toFixed()方法 原理 toFixed()方法可以将浮点数四舍五入到指定的小数位数。需要注意的是toFixed()返回的是一个字符串需要使用parseFloat()将其转换回数字。 const result parseFloat((0.1 0.2).toFixed(10)); 三、使用第三方库 原理 有一些第三方库专门用于处理浮点数计算精度问题如decimal.js、bignumber.js等。这些库提供了一系列方法来进行高精度的浮点数计算。示例 使用decimal.js库 import Decimal from decimal.js; const a new Decimal(0.1); const b new Decimal(0.2); const result a.plus(b).toNumber(); 四、使用BigDecimal类Java 原理 在Java中BigDecimal类可以精确表示小数并且允许开发者控制舍入模式。BigDecimal提供了丰富的数学运算方法可以避免浮点数的精度问题。 import java.math.BigDecimal; public class BigDecimalExample { public static void main(String[] args) { BigDecimal a new BigDecimal(0.1); BigDecimal b new BigDecimal(0.2); BigDecimal sum a.add(b); System.out.println(sum); // 输出: 0.3 } } 五、引入误差容忍度epsilon 原理 在比较两个浮点数时由于它们在底层的二进制表示中可能存在微小差异直接比较可能会导致错误的结果。引入误差容忍度epsilon即允许两个浮点数的差值在某个很小的范围内视为相等。 double a 0.1 0.2; double b 0.3; double epsilon 1e-10; // 容忍度 System.out.println(Math.abs(a - b) epsilon); // 输出: true 六、使用整数表示货币值 原理 在处理货币运算时可以使用整数来表示货币值如以分为单位表示货币值而不是以元从而避免浮点数精度问题。 int priceInCents 100; // 1.00元表示为100分 int quantity 3; int totalCostInCents priceInCents * quantity; System.out.println(总价: (totalCostInCents / 100.0) 元); // 输出: 3.00 元 综上所述解决浮点数运算精度丢失问题的方法有多种可以根据具体场景和需求选择合适的方法。在实际应用中应尽量避免在需要高精度计算的场景中使用浮点数而是采用整数或其他高精度数据类型进行计算。 超过Long整型的数据应该如何表示 基本数值类型都有一个表达范围如果超过这个范围就会有数值溢出的风险。 在 Java 中64 位 long 整型是最大的整数类型。 long l Long.MAX_VALUE; System.out.println(l 1); // -9223372036854775808 System.out.println(l 1 Long.MIN_VALUE); // true BigInteger 内部使用 int[] 数组来存储任意大小的整形数据。 相对于常规整数类型的运算来说BigInteger 运算的效率会相对较低。
http://www.hkea.cn/news/14282136/

相关文章:

  • 知名的网站建设公司排名行业软件定制开发
  • 网站建设一个多少钱百度小程序有什么用
  • dw做网站地图网站做视频流量赚钱
  • 淘宝客做的比较好的网站南宁世尊商贸网站建设
  • 做教育网站需要规划哪些内容好项目推荐平台
  • 网站备案删除北京原创先锋网络科技发展有限公司
  • 济南免费做网站大连市网站制作电话
  • 淮北做网站公司做垂直行业网站利润分析
  • 怎样弄网站的导航栏网站备案信息注销
  • 热水器网站建设 中企动力关于我们网页设计模板
  • 禅城建设网站中国网网址是多少
  • 成都网站制作怎么收费海口自助建站
  • 网站需要哪些备案网站开发配置管理计划
  • 自己做的网站项目怎样卖办公室装修设计app
  • 做网站用什么语言快网站建设公司外包
  • 网站制作先学什么新冠疫苗最新官方消息
  • 微网站建设市场分析网页设计html代码大全居中
  • 番禺开发网站费用专业建设网站哪家好
  • 承德网站建设郑州网站建设公司前景
  • 哈尔滨网站制作软件家在深圳光明论坛
  • 狼窝网站更新升级通知山东联迪建设集团网站
  • 佛山网站建设和维护电话卡分销平台
  • 马鞍山网站建设服务开发哪些网站做推广比较好
  • pc站和手机网站石做视频网站需要牌照
  • 金种子酒业网站建设改进网站的建议
  • 龙岗网站优化公司案例网页设计费用标准
  • wordpress首页js怎么添加百度搜索名字排名优化
  • 网站seo插件wordpress4.9 设置中文
  • 建立个人网站需要什么传奇网站模板psd
  • 鱼台县建设局网站整站优化代理