Java является pass by value, поэтому копия параметра а передается методу, поэтому изменения в a
в метод не влияет на исходный аргумент 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;
}
}
Поскольку в последнем случае (даже если его Pass by Value), ссылка копируется и оба контрольная точка к тому же объекту. Таким образом, изменения, сделанные внутри метода killOver21
, фактически изменяет объект.
Почему бы не просто вернуть значение из функции? –
Вы можете сделать это только с изменяемыми типами. – roippi
Тот факт, что Java не имеет указателей, не имеет значения. В смысле Паскаля он * имеет * указатели. Важно то, что у него нет пропусков. – EJP