Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在方法中更改基元变量的值?_Java_Pass By Reference_Pass By Value_Primitive Types - Fatal编程技术网

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;

在Java中,可以声明原语类型(int、double…)的参数并在方法中更改其值。退出该方法时,变量的值是否已更新?

由于java处理参数的方式,这并不简单。原语(如
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)
where
makeItTwo
返回新值。请参阅此参考:您可以作弊并将参数设置为长度为1的
int[]
。问题的简单答案是否。原始参数变量确实可以在方法内操作,但由于它是按值传递的,因此更改不会在方法外生效。请参阅此示例代码的输出:可能值得注意的是,原语不能用作泛型类型,因此即使采用这种方法,也必须使用包装类型。新包装(1L);