我知道Java中没有指针。但是如何更改调用范围中的值?例如,我想写一个带整数num的函数,如果它大于21则将整数设置为0,否则什么都不做。 总的来说,我的代码如下:
int a=34;
KillOver21(a);
System.out.print(a);
我期待0。
答案 0 :(得分:4)
Java是pass by value,因此参数a的副本会发送到方法,因此对方法中a
的修改不会影响{{1}中的原始参数a
}}
您可以从main
方法
return int
获得最大值
KillOver21(a)
但你可以用自定义对象实现类似的东西,比如你有一个类
int z = KillOver21(a); // This will return 0
System.out.print(z);
然后您可以期待class AHolder {
public int a;
}
实例更改
AHolder
因为在后者中(即使其按值传递),引用被复制并且引用都指向同一对象。因此,在public static void main(String [] args) {
AHolder a = new AHolder();
a.a = 34;
killOver21(a);
System.out.println(a.a);
}
public static void killOver21(AHolder b) {
if(b.a > 21) {
b.a = 0;
}
}
方法中进行的更改实际上会更改对象。
答案 1 :(得分:3)
根本不可能,Java支持按值传递。 int a
的值将被复制到该函数中。
您可以使用Object
而不是原语,将参考值复制到您的函数中,通过该函数可以获取实际对象并对其进行修改。
答案 2 :(得分:1)
基本上不可能在Java,期间。 int
是不可变的,并按值传递。你需要来创建一个可变的int
类型:
class MutableInt {
private int value;
public MutableInt(int value) { this.value = value; }
public getValue() { return this.value; }
public setValue(int value) { this.value = value; }
}
然后:
void KillOver21(MutableInt m) {
if(m.getValue() > 21) { m.setValue(0); }
}
但是,请注意,表示由其值而非其身份定义的概念的可变类型通常是一个非常糟糕的主意。但是,这是实现您想要实现的目标的唯一途径。再一次,我用最强硬的词语提醒你:你正在做的是一个糟糕的想法。你应该找到另一种方式。
Doc,我这样做会很痛。
然后不要这样做!
答案 3 :(得分:1)
最简单的方法(快速和;脏)是将值放在数组
中int holder[] = new int[]{ a};
KillOver21(holder)
System.out.printf( "value=[%d]", holder[0] );
void KillOver21(int holder[] ) {
holder[0] = 0;
}