Java 在方法中更改基元变量的值?
在Java中,可以声明原语类型(int、double…)的参数并在方法中更改其值。退出该方法时,变量的值是否已更新?由于java处理参数的方式,这并不简单。原语(如Java 在方法中更改基元变量的值?,java,pass-by-reference,pass-by-value,primitive-types,Java,Pass By Reference,Pass By Value,Primitive Types,在Java中,可以声明原语类型(int、double…)的参数并在方法中更改其值。退出该方法时,变量的值是否已更新?由于java处理参数的方式,这并不简单。原语(如int或long)按值传递,而对象按引用传递。这意味着只有对象可以在方法内部操作,并且在方法外部可以看到更改。如果要获得此行为,必须使用包装器类: class Wrapper<class T>{ private T val; public Wrapper(T v){ val = v;
int
或long
)按值传递,而对象
按引用传递。这意味着只有对象
可以在方法内部操作,并且在方法外部可以看到更改。如果要获得此行为,必须使用包装器类:
class Wrapper<class T>{
private T val;
public Wrapper(T v){
val = v;
}
public void setVal(T v){ val = v; }
public T getVal(){ return val; }
}
类包装器{
私人旅行社;
公共包装(电视){
val=v;
}
公共无效setVal(tv){val=v;}
public T getVal(){return val;}
}
假设您想要int x=1;makeItTwo(x)//现在x是2,这是不可能的,因为Java总是按值传递。你最好的机会是x=makeItTwo(x)
wheremakeItTwo
返回新值。请参阅此参考:您可以作弊并将参数设置为长度为1的int[]
。问题的简单答案是否。原始参数变量确实可以在方法内操作,但由于它是按值传递的,因此更改不会在方法外生效。请参阅此示例代码的输出:可能值得注意的是,原语不能用作泛型类型,因此即使采用这种方法,也必须使用包装类型。新包装(1L);