java.lang.NoSuchMethodError: java.math.BigDecimal ( I)V
BigDecimal在JDK版本差异
原来程序里使用new BigDecimal(100),在JDK 1.5里多了int的构造函数
可是在1.4.2是不能执行,否则会出现以下错误:
java.lang.NoSuchMethodError: java.math.BigDecimal: method <init>(I)V not found
后来使用replace把new BigDecimal(100)改成new BigDecimal("100")才OK
网络也找到另一种解法:new BigDecimal((double) 100);
在JDK1.4 以前只有 BigDecimal ( double ),
在JDK1.5 以后新有 BigDecimal ( int ),
我的开发环境是jdk1.6.0_07
而执行的环境是
java version "1.4.2"
如果写成
new BigDecimal (100d);
就没问题, 问题就在他不会自动将 int 转型成 double 而是直接呼叫BigDecimal ( int ),
我想你作的事并不只是简单改一个输出(-target -source)的格式这样而已。当你使用 JDK 1.5 来编译并指定 -target 1.4,这样子是让产生出来的 bytecode 的版号能够让 1.4 JVM 可以接受,并不会改变使用到的 bootstrap classes(也就是说 compiler 运作时所使用的 J2SE core classes 还是 JRE 1.5 所提供的)。如果你的程序本来就是一直在 JRE 1.4 执行,那么比较大的可能是你以前都使用 JDK 1.4 来做编译,现在换成了 JDK 1.5 来编译。
如果说你使用的 JRE 1.4 在执行到 new BigDecimal(100); 时没有丢出 java.lang.NoSuchMethodError,那么可以说是你使用的 JRE implementation 有 bug。
如果实际上 JRE 会丢出 java.lang.NoSuchMethodError,但是你却认为程序没有丢出任何 exception 就死掉,这样则是你的程序没有写好。
至于你提到理论上 new java.math.BigDecimal(100); 经过 1.5 compiler 编译过后,拿到 JRE 1.4 执行应该没有问题,我认为你可以试着思考以下几点:
1. 使用 1.4 compiler 编译 new java.math.BigDecimal(100); 是由编译程序帮你产生把 100 promote 成 100.0,最后是透过 BigDecimal(double) 这个 constructor 来建构 BigDecimal object。
2. 你把 1.5 compiler 产生的 bytecode 拿到 JRE 1.4 来执行,这中间没有牵涉编译过程,不需要考虑同样的程序代码在 1.4 compiler 编译会是怎么样,而是要看 JVM 会怎么去解译你提供的 bytecode。
3. 你使用的 JRE 并不是文字(source code) level 的 interpreter。
分享到:
相关推荐
js中操作Bigdecimal类,包含所有java中bigdecimal的操作,加减乘除,四舍五入,比较等。
标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些...
Centos7 el7.x86_64 官方离线安装包,安装指令为 sudo rpm -ivh rubygem-bigdecimal-1.2.0-39.el7_9.x86_64.rpm
总之,BigDecimal.js是一个强大的JavaScript库,专门用于处理大数的高精度计算,通过引入"BigDecimal-all-last.min.js",开发者可以获得精确的大数运算能力,从而避免JavaScript原生数据类型的精度问题。在开发过程...
离线安装包,亲测可用
`json-lib-2.4-jdk15.jar` 这个文件名表明这是一个特定版本的JSON Lib——版本2.4,且是针对JDK 1.5编译的。这意味着如果你的开发环境是JDK 1.5,使用这个版本的库可以避免潜在的兼容性问题。 使用JSON Lib时,你...
为了解决这个问题,开发者们引入了`BigDecimal`类库的概念,它在Java中被广泛使用,用于进行高精度的算术运算。本文将详细介绍JavaScript版的`BigDecimal`类库,以及如何在JavaScript环境中实现精确计算。 ...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装