每次我想交换两个值时,我必须使用临时来做实际交换。 为什么Java不给我们在任何类中的设施方法来简单地交换两个变量的值?为什么Java不提供简单的交换功能?
4
A
回答
12
Java是Pass-by-Value。这就是为什么你不能创建一个简单的交换方法(ref)。
但是,您可以换另一个对象中的引用和swap的内部裁判:
public static void main(String[] args) {
Ref<Integer> a = new Ref<Integer>(1);
Ref<Integer> b = new Ref<Integer>(2);
swap(a, b);
System.out.println(a + " " + b); // prints "2 1"
}
public static <T> void swap(Ref<T> a, Ref<T> b) {
T tmp = a.value;
a.value = b.value;
b.value = tmp;
}
static class Ref<T> {
public T value;
public Ref(T t) {
this.value = t;
}
@Override
public String toString() {
return value.toString();
}
}
3
的Java不提供这样的方法,因为它是不可能的。 变量按值传递给方法。是的,即使这些是物体。在这种情况下,我们通过值传递对象的引用。因此,您无法在接收此变量的方法内改变源变量的值作为参数:
int a = 5;
int b = 6;
swap(a, b);
// a is still 5, b is still 6!
void swap(int first, int second) {
int tmp = first;
first = second;
second = tmp;
}
相关问题
- 1. 为什么功能测试不够?单元测试提供什么?
- 2. 简单的C++交换功能
- 3. 为什么Prelude的单词功能不是简单的书写?
- 4. 为什么这个简单的功能不起作用?
- 5. 为什么不是这个简单的功能工作?
- 6. 表单提交的功能
- 7. 为什么softmax功能必需?为什么不简单归一化?
- 8. 为什么不能用SwitchPreference交换CheckBoxPreference?
- 9. 装配 - 交换功能 - 为什么它不起作用?
- 10. 在Java中简单交换
- 11. 为什么我不能通过php的curl提交表单?
- 12. 为什么我的jQuery表单不能重新提交?
- 13. 为什么我的表单不能自动提交?
- 14. 为什么这个简单的java代码不能编译?
- 15. 多处理简单功能不起作用,但为什么
- 16. 为什么托管语言不能提供手动删除对象的功能?
- 17. 最简单的Java SQL提供程序?
- 18. 简单替换功能
- 19. 为什么不能用GET提交表单
- 20. 为什么我不能提交表单,即使没有
- 21. 为什么表单不能阻止提交?
- 22. java中的portlet编程能为我们提供什么?
- 23. 为什么提供两个获取功能
- 24. 我的简单类功能中的意外输出。为什么?
- 25. 实现Serializable为您提供什么优势而不是简单的方法?
- 26. 何时在C++中提供自定义交换功能?
- 27. 为什么标准C++容器适配器不提供清晰的功能?
- 28. 为什么CMSIS不提供读取IRQ启用/禁用状态的功能?
- 29. 功能提交
- 30. Java。简单的线程操作交换
那么,这有什么问题?为什么Java没有这个东西?询问Java创作者。 – shift66 2012-03-01 11:06:42
请参阅http://stackoverflow.com/questions/3624525/how-to-write-a-basic-swap-function-in-java和http://stackoverflow.com/questions/2393906/how-doi-i- make-my-swap-function-in-java – 2012-03-01 11:10:02
@Ademiban更正你的语法。 – Juvanis 2012-03-01 11:10:26