在Java,新的BigDecimal从另一个bigDecimal.toString()总是等于?例如
BigDecimal a = new BigDecimal("1.23");
BigDecimal b = new BigDecimal(a.toString());
System.out.println(a.compareTo(b) == 0); // always true?
我知道BigDecimal是不可变的,但我想知道是否有什么好的方法克隆
BigDeximal对象?
只是说明一下:BigDecimal不是最终的,所以它可以被一个可变类扩展。因此,在某些使用案例中,可能需要制作防御性副本。
可以使用BigDecimal.toString()方法:
* There is a one-to-one mapping between the distinguishable
* {@code BigDecimal} values and the result of this conversion.
* That is, every distinguishable {@code BigDecimal} value
* (unscaled value and scale) has a unique string representation
* as a result of using {@code toString}. If that string
* representation is converted back to a {@code BigDecimal} using
* the {@link #BigDecimal(String)} constructor, then the original
* value will be recovered.
下面是制作BigDecimal防御副本的代码示例:
public static BigDecimal safeInstance(BigDecimal val) {
return val.getClass() == BigDecimal.class ?
val : new BigDecimal(val.toString());
}
但这有意义吗?如果一个类扩展了BigDecimal类,你不能确定它没有在不遵守约定的情况下扩展其toString()方法。。。
也许最好使BigDecimal的任何扩展无效:
public static BigDecimal safeInstance(BigDecimal val) {
if (val.getClass() != BigDecimal.class) {
//TODO throw exception
}
return val;
}
一个简单的方法是加零
BigDecimal a = new BigDecimal("1.23");
BigDecimal b = a.add(BigDecimal.ZERO);
是的,你可以这么认为。从<code>BigDecimal。toStringdocs
如果使用BigDecimal(String)
构造函数将该字符串表示转换回BigDecimal
,则将恢复原始值。
但是,您可以安全地共享同一对象,因为它是不可变的
,并且不需要复制
在我的C#/XAML metro应用程序中,有一个启动长时间运行过程的按钮。因此,按照建议,我使用Async/await来确保UI线程不会被阻塞: 偶尔,GetResults中发生的事情需要额外的用户输入才能继续。为了简单起见,假设用户只需单击“Continue”按钮。 我的问题是:如何挂起GetResults的执行,让它等待一个事件,比如单击另一个按钮? 这里有一个丑陋的方法来实现我所寻找的:C
问题内容: 我学习Java String已有一段时间了。以下问题基于以下帖子 Java String是Java中String的特殊 不变性 不可变性:现在,通过不可变性,已经设计了String类,以便可以在其他位置/变量中重用 公共池中 的值。如果将的创建为 但是,如果我创建像 为什么这也是不变的?(或者是?)。由于它具有专用的堆内存,因此我应该能够在不影响任何其他变量的情况下对其进行修改。因此,
我得到 我怀疑这是因为两者都是。
问题内容: 我们有一些Hibernate getter方法,它们都用和标注。 如果没有相应的设置器,则会出现异常。为什么是这样? 在我们的例子中,我们派生了从getter返回的值(将其存储在DB中),而setter没有任何功能目的。因此,我们只有一个空方法可以解决错误情况。 问题答案: 正如其他人提到的那样,如果您注释属性getter方法,则Hibernate在从数据库读取值时会使用setter。
问题内容: 我试图确定用于将数字与相同数字的字符或字符串版本进行比较的标准SQL行为。是否(或类似)总是返回某种“truthy”值(,,等)?我已经在PostgreSQL和MySQL上进行了同样的确认,但是我找不到整个SQL的资源。 更新:问题 的目的是我试图找出在选择/插入/更新/等时使用不带引号的数字是否可以使用。来自其值为数字的非数字字段。 问题答案: 给人因为是一个正确的构造函数中知道我所
我已经设置了这组重写(Zend Framework默认重写规则): 我的文件夹只包含和,没有其他内容。 重写规则应通过index.php将所有请求发送到不存在的文件。这适用于(无论是否存在控制器),但不适用于或以开头的任何其他url。 所有URL都被路由到apache的404页面,所有其他URL都可以工作。 我该如何解决这个问题?