我正在尝试创建一个方法来增加各种变量的值,这里是我正在使用的逻辑类型的一个例子,但是当方法完成时,原始变量没有改变。我需要添加或替换什么才能让值在方法之外更改?
static int num = 2;
static String text = "3";
public static void up(int i, String s){
//Debug
System.out.println("Before Change");
System.out.println("I: " + i);
System.out.println("S: " + s);
System.out.println("Num: " + num);
System.out.println("Text: " + text);
//Code
i = i + 3;
s = String.valueOf(i);
//Debug
System.out.println("After Change");
System.out.println("I: " + i);
System.out.println("S: " + s);
System.out.println("Num: " + num);
System.out.println("Text: " + text);
}
public static void main(String[] args) {
up(num, text);
//Debug
System.out.println("Out of Scope");
System.out.println("Num: " + num);
System.out.println("Text: " + text);
}
答案 0 :(得分:2)
传递给您的函数的int i
和String s
将按按值传递。这意味着您只收到变量的副本。对变量的操作不会影响其原始值。
您可以修改方法并使其返回包含修改值的对象:
创建一个新类来封装修改后的值:
class Result{
int i;
String s;
public Result(int i, String s){
this.i = i;
this.s = s;
}
}
现在您的方法可以返回此Result
public static Result up(int i, String s){
//Code
i = i + 3;
s = String.valueOf(i);
return new Result(i, s);
}
然后,您可以访问main方法中的修改后的值:
public static void main(String[] args) {
Result r = up(num, "test");
System.out.println("int result " + r.i);
System.out.println("string result " + r.s);
}
答案 1 :(得分:0)
您只需在调用方法i
时传递变量up(int i, String s)
的副本值。它不会更改方法up
中的值。
答案 2 :(得分:0)
你可以使用WrapperClass来完成它。这是因为Java使用Pass By Value作为其他人提到的。解决方法是在有多个值时创建WrapperClass。以下是使用WrapperClass修改类的方法。使用Corba Java框架时,提供Holder Classes来提供引用语义。
static int num = 2;
static String text = "3";
public static void up(WrapperClass w){
//Debug
System.out.println("Before Change");
System.out.println("I: " + w.i);
System.out.println("S: " + w.s);
System.out.println("Num: " + num);
System.out.println("Text: " + text);
//Code
w.i = w.i + 3;
w.s = String.valueOf(w.i);
//Debug
System.out.println("After Change");
System.out.println("I: " + w.i);
System.out.println("S: " + w.s);
System.out.println("Num: " + num);
System.out.println("Text: " + text);
}
public static void main(String[] args) {
WrapperClass w = new WrapperClass();
w.i = num;
w.s = text;
up(w);
//Debug
System.out.println("Out of Scope");
System.out.println("Num: " + w.i);
System.out.println("Text: " + w.s);
}
static class WrapperClass {
public int i;
public String s;
}