![]() |
1
39
不,对象不是通过引用传递的。引用是按值传递的,这有很大的区别。
你的
编辑:回答你的更新:没错。假设您的“MyIntegerObj”类型是可变的,并且在调用时更改其内部状态
|
![]() |
2
24
|
![]() |
3
8
这种类型的行为通常通过将方法从void更改为int(在本例中为int)来实现:
或者,也可以将整数包装在泛型单元格类中。您只需编写此单元类一次:
|
![]() |
4
3
正如Jon Skeet提到的,Java中的所有方法都是按值传递的,而不是按引用传递的。由于引用类型是按值传递的,所以函数体中的引用是引用的副本-此副本和原始引用都指向相同的值。 但是,如果在函数体内部重新分配副本,则不会对程序的其余部分产生影响,因为当函数退出时,副本将超出范围。
但是,考虑到你并不真的需要通过参考来做你想做的事情。例如,您不需要方法来增加
对于更复杂的类型,如在对象上设置某些属性,您正在使用的对象可能是可变的;在这种情况下,引用的副本工作得很好,因为自动取消引用将使您到达正在调用其setter的原始对象。 |
![]() |
5
3
旁注:以我的拙见,在整数对象上编写n++是极其误导的。这依赖于Java的一个称为“自动装箱”的功能,在该功能中,它会自动且无警告地将原语转换为相应的装箱对象,如int到Integer或boolean到boolean。坦率地说,我认为这是一个糟糕的特性。是的,有时它会自动为你做一个方便的转换,从而使你的生活变得更简单,但它也可以做一些你不打算也没有意识到正在发生的转换,产生意想不到的副作用。
第一:让增量函数返回一个新的整数和更新后的值。比如:
等 第二:创建自己的类,该类类似于Integer,但它是可变的。比如:
当然,最大的问题是您几乎必须重新发明Integer类。 |
![]() |
6
2
|
|
7
2
皮肤样
|
![]() |
8
1
注意
|
|
9
1
见原子整数: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html 您可以使用这个java.util.concurrent类实现线程安全。 |
![]() |
10
0
输出:
|
![]() |
Tono Nam · 无法在golang中通过引用修改对象 3 年前 |
![]() |
uzivanky · 课堂上不同的“this” 7 年前 |
![]() |
Henry Marshall · 通过引用替换JS对象[重构工作代码] 7 年前 |
|
user9441223 · 通过引用传递对象并将其存储为成员变量 7 年前 |
![]() |
Enryu · 参考变量参数vs局部参考变量[关闭] 7 年前 |
![]() |
Tryer · 计算不同类别对象的数量 7 年前 |