(将值添加到数字中)如何+;java中的操作员工作?
我想知道+操作符在java中是如何工作的,想象一下以下情况:(将值添加到数字中)如何+;java中的操作员工作?,java,Java,我想知道+操作符在java中是如何工作的,想象一下以下情况: Long number1 = 5L; Long number2 = 10L; Long number3 = number1 + number2; 第三条语句是否创建另一个对象,其中包含number1和number2的总和?如果是这样的话,最好使用number1.addValue(number2)这样的方法将number2添加到number1中,而不创建新对象 第三条语句是否创建了另一个包含number1和number2之和的对象 是
Long number1 = 5L;
Long number2 = 10L;
Long number3 = number1 + number2;
第三条语句是否创建另一个对象
,其中包含number1
和number2
的总和?如果是这样的话,最好使用number1.addValue(number2)
这样的方法将number2添加到number1中,而不创建新对象
第三条语句是否创建了另一个包含number1和number2之和的对象
是的
使用类似number1.addValue(number2)的方法将number2添加到number1中,并且不创建新对象,这不是更好吗
不,不会的。这将要求Java的原始包装器类是可变的。事实上,它们是不可变的
考虑这一点:
Long five = 5L;
Long ten = 10L
Long sum = five;
sum.addValue(ten); // Hypothetically ....
问题:five
现在的值是多少
回答:5
现在将具有值15
。。。因为five
和sum
是同一个对象
如果他们将包装类Long
等设计为可变的,那么对程序员来说,使用装箱和拆箱将更加复杂
包装器类当前的==
语义是违反直觉的,这已经够糟糕的了。例如:
Long one_million = 1,000,000L;
Long one_million_and_one = one_million + 1L;
Long one_million_again = one_million_and_one - 1L;
System.out.println(one_million.equals(one_million_again));
System.out.println(one_million == one_million_again);
。。。打印
true
和false
您可以这样做number1=number1+number2代码>为什么需要额外的方法呢?我想你写的东西会创建新对象并将其引用放在数字1中,不是吗?你不需要显式地创建它,Long是不可变的,你可以尝试AtomicInteger
来实现可变的