Java BigDecimal与Android BigDecimal的区别

10
我在项目中遇到了java.math.BigDecimal和android.icu.math.BigDecimal,因为我需要使用BigDecimal。
我意识到Android的BigDecimal需要API级别24。
这两个类有什么区别?我想知道Android实现中是否有任何性能优化?

阅读 https://developer.android.com/reference/kotlin/android/icu/math/BigDecimal - IntelliJ Amiya
1
@IntelliJAmiya 这并没有提到任何区别的内容。 - Mosius
3个回答

10

android.icu.math.BigDecimalICU库(Unicode国际组件)的一部分。自API 24以来,Android框架公开了一些ICU4J类供您使用。有关Unicode和I18N支持的Android文档指出:

javaandroid包中有一些类与ICU4J中找到的类相对应。但是,ICU4J通常为标准和语言提供更广泛的支持。

不要被上述引用所困扰,因为ICU类确实位于android包中。它们从com.ibm.icu移至android.icu,以避免冲突。

关于BigDecimal:我在互联网上找到了一个讨论,结论是BigDecimal在Java之前就已经存在于ICU中,并且为了兼容性而保留在库中。

底线:使用任何您喜欢的实现,但是java.math.BigDecimal不太可能在未来被弃用。


1

可以使用java.math.BigDecimalandroid.icu.math.BigDecimal,两者之间不会有性能差异。因为这些都是基本类,Android的BigDecimal是参考Java的BigDecimal重新创建的。

如果您想知道两者之间的区别,则:

  • 按目的而言,两者相同。
  • 按代码而言,它们可能不同,可能具有更少或更多的方法。因此,您应该阅读两个类中的所有方法以找出区别。

https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html https://developer.android.com/reference/java/math/BigDecimal

Android重新创建类以向现有类添加某些功能。


你提到的两个引用是相同的,我想安卓开发者网站只是复制了主要文档,我的意思是 https://developer.android.com/reference/kotlin/android/icu/math/BigDecimal,它是Java kotlin.Number 的子类。 - Mosius
那篇维基百科文章中有关于Android重新创建Java类的内容吗? - Mosius
1
我非常怀疑法庭案件理论:该类并非由Android“重新创建”,而是ICU库的一部分(http://site.icu-project.org/),该库部分包含在Android中,以[提供更广泛的标准和语言支持](https://developer.android.com/guide/topics/resources/internationalization)。 - Markus Penguin
@MarkusPenguin 我已经编辑了我的回答(删除了维基链接),我认为谷歌正在分离它的类,以免依赖于Java类。 - Khemraj Sharma
@Mosius 不,那与你的问题无关,我只是添加了链接告诉你。 - Khemraj Sharma
@Khemraj 无论如何,它都应该依赖于一种语言,Java或Kotlin。 - Mosius

-5

3
我不这么认为,它在Android包中,与kotlin无关。 - Mosius
如果您查看文档,您可以看到它扩展了kotlin.Number kotlin.Any ↳ kotlin.Number ↳ android.icu.math.BigDecimal 文档也全部使用kotlin编写。 - IsaiahJ
我知道,但它在kotlin语言中没有被实现。 - Mosius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接