问这样一个原始问题的道歉。如何在java中实现int in/out参数
我写了一个函数带了一个参数;这个参数应该是一个输入/输出参数。
调试后,我意识到,由于在java中没有明确的引用类型,我应该使用Integer对象(而不是int primitive)作为参数类型。所以我改变了我的功能:
boolean getNextFoo(int currentFoo) {
currentFoo = currentFoo + 1;
}
到:
boolean getNextFoo(Integer currentFoo) {
currentFoo = currentFoo + 1;
}
检查调试器中执行后,我意识到这有相同的结果以前。也就是说,我通过的对象getNextFoo()
不会更改。
问题1:如何使用Java实现in/out参数(更具体地用于基本类型)。我想(原谅我)对象总是通过引用传递。
问题2:我在互联网上查找答案并阅读Integer是不可变的。我理解不变的手段是不变的。如果是这样,为什么编译器(解释器?)在getNextFoo
函数中做currentFoo = currentFoo + 1
时抱怨?
PS:我看到在Integer对象实际上没有被传递到getNextFoo
调试器,而不是Integer.valueOf
值被传递到getNextFoo
这是留给我更糊涂了。
我猜想它正在用'(currentFoo + 1)'的值创建一个新的Integer实例。但是'整数'也是一个对象。如果我不能'myObject = myOldObject'来创建'myOldObject'的副本,编译器如何创建一个也是对象的Integer副本?如果我的意图是创建一个副本,我必须在myOldObject类中定义一个拷贝构造函数,以便能够复制它。即使这样,我也必须显式调用myObject = new MyObject(myOldObject)来获取副本。 –