BigDecimal为什么不能这样赋值BigDecimal a=new BigDecimal(7); BigDecimal b=a;
时间: 2023-11-21 18:56:49 浏览: 37
在Java中,BigDecimal是不可变的对象,这意味着一旦创建了一个BigDecimal对象,就不能更改它的值。因此,如果您使用BigDecimal a = new BigDecimal(7)创建一个BigDecimal对象,那么a将指向一个值为7的BigDecimal对象。如果您使用BigDecimal b = a将a赋值给b,那么b将指向与a相同的BigDecimal对象,即值为7的BigDecimal对象。这意味着,如果您更改a的值,b的值也会更改,因为它们指向同一个对象。因此,为了避免这种情况,您应该使用BigDecimal b = new BigDecimal(a.toString())来创建一个新的BigDecimal对象,该对象具有与a相同的值,但是指向不同的对象。
以下是一个例子:
```java
BigDecimal a = new BigDecimal(7);
BigDecimal b = new BigDecimal(a.toString());
System.out.println("a = " + a); // 输出:a = 7
System.out.println("b = " + b); // 输出:b = 7
a = a.add(new BigDecimal(3));
System.out.println("a = " + a); // 输出:a = 10
System.out.println("b = " + b); // 输出:b = 7
```
相关问题
BigDecimal A = new BigDecimal(a);
BigDecimal A = new BigDecimal(a)创建了一个新的BigDecimal对象,该对象的值与变量a的值相等。注意,BigDecimal的equals方法比较的是值和精度,而不只是值。因此,在比较BigDecimal对象时,需要使用equals方法而不是==操作符。对于BigDecimal对象的大小比较,可以使用compareTo方法,该方法返回一个整数值,表示两个BigDecimal对象的大小关系。
BigDecimal a= new BigDecimal(0.1F);这样写有没有精度问题?
是的,使用`new BigDecimal(0.1F)`这样的方式创建`BigDecimal`对象可能会存在精度问题。原因是浮点数在计算机中是以二进制表示的,无法精确地表示十进制的0.1。因此,将0.1F转换为`BigDecimal`时,可能会导致精度损失。
为了避免这个问题,可以使用字符串构造函数来创建`BigDecimal`对象,如下所示:
```java
BigDecimal a = new BigDecimal("0.1");
```
这样可以确保精度不受损失。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)