Java 如何从方法内部更改变量的值?
我试图创建一个方法来增加各种变量的值,这里是我当前使用的逻辑类型的一个示例,但是当方法完成时,原始变量没有改变。我需要添加或替换什么才能允许值在方法之外更改Java 如何从方法内部更改变量的值?,java,variables,methods,Java,Variables,Methods,我试图创建一个方法来增加各种变量的值,这里是我当前使用的逻辑类型的一个示例,但是当方法完成时,原始变量没有改变。我需要添加或替换什么才能允许值在方法之外更改 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: " +
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);
}
传递给函数的
int i
和字符串s
是通过值传递的。这意味着您只收到变量的副本。对变量的操作不会影响其原始值
可以修改方法并使其返回包含修改值的对象:
创建一个新类来封装修改后的值:
class Result{
int i;
String s;
public Result(int i, String s){
this.i = i;
this.s = s;
}
}
现在,您的方法可以返回此结果
public static Result up(int i, String s){
//Code
i = i + 3;
s = String.valueOf(i);
return new Result(i, s);
}
然后,您可以在主方法中访问修改后的值:
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);
}
传递给函数的
int i
和字符串s
是通过值传递的。这意味着您只收到变量的副本。对变量的操作不会影响其原始值
可以修改方法并使其返回包含修改值的对象:
创建一个新类来封装修改后的值:
class Result{
int i;
String s;
public Result(int i, String s){
this.i = i;
this.s = s;
}
}
现在,您的方法可以返回此结果
public static Result up(int i, String s){
//Code
i = i + 3;
s = String.valueOf(i);
return new Result(i, s);
}
然后,您可以在主方法中访问修改后的值:
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);
}
调用method
up(int i,String s)
时,只需传递变量i
的复制值。它不会更改methodup
中的值
阅读这篇文章:当调用method
up(int i,String s)
时,只需传递变量i
的副本值。它不会更改methodup
中的值
阅读这篇文章:你可以用一个包装器类来完成。这是因为Java使用了其他人提到的传递值。解决方法是在存在多个值的情况下创建WrapperClass。下面是如何使用WrapperClass修改类。在使用Corba时,Java框架提供了参考语义
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;
}
您可以使用wrapper类来完成。这是因为Java使用了其他人提到的传递值。解决方法是在存在多个值的情况下创建WrapperClass。下面是如何使用WrapperClass修改类。在使用Corba时,Java框架提供了参考语义
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;
}
这是因为变量
i
是您传入的内容的副本,而不是(原始)变量num
。原因是java使用按值调用基本类型。文本肯定会在函数调用之外得到更新,因为它是一个字符串对象,但num是int类型,一个基本类型,它不会在函数之外更新。@VineetKasatString
不会被更新,也不会更新int
@SergheyBishyr你说得对。字符串也不会更新,因为变量i
是您传入内容的副本,而不是(原始)变量num
。原因是java使用按值调用基本类型。文本肯定会在函数调用之外得到更新,因为它是一个字符串对象,但num是int类型,一个基本类型,它不会在函数之外更新。@VineetKasatString
不会被更新,也不会更新int
@SergheyBishyr你说得对。字符串也不会更新。在这种情况下,您是否可以接受答案并向上投票,以便其他人可以看到此引用。一个小编辑。在调用方法(w)后,我必须添加'num=w.I'和'text=w.s',以实际更改值,而不仅仅是打印w.I和w.sYes,您可以这样做。您甚至可以尝试分别为i和创建新的Holder类,将它们称为IntHolder和StringHolder,并使用它们代替包装器类。在这种情况下,您可以接受答案并向上投票,以便其他人可以看到此引用。只需进行一个小的编辑。在调用方法(w)后,我必须添加'num=w.I'和'text=w.s',以实际更改值,而不仅仅是打印w.I和w.sYes,您可以这样做。您甚至可以尝试为i和单独创建新的Holder类,将它们称为IntHolder和StringHolder,并使用它们代替包装器类。