Java передается по значению , но когда мы передаем ссылку на объект, ссылочное значение передается методу get, и оттуда метод может изменить значение членов объекта.
Посмотрите на следующий код
открытый класс Passbyvalue {
public static void main(String[] args) {
// TODO code application logic here
Animal animal=new Animal();
animal.name="Dog";
System.out.println(animal.name);
testIt(animal);
System.out.println(animal.name);
}
public static void testIt(Animal animal){
animal.name="Cat";
}
}
Выход
Собака
Cat
Это потому, что обе ссылки (оригинал и метод) указывают на один и тот же объект.
__________
| |
| |<------------- Orignal Refernce
| Object |
| |<------------- Method Refernce
| |
|__________|
Если вы хотите увидеть этот эффект более четко, создайте новый объект в методе
открытый класс Passbyvalue {
public static void main(String[] args) {
Animal animal=new Animal();
animal.name="Dog";
System.out.println(animal.name);
testIt(animal);
System.out.println(animal.name);
}
public static void testIt(Animal animal){
animal=new Animal();
animal.name="Cat";
}
}
Выход
Собака
Собака
Теперь ссылка на метод ссылается на другой объект в куче.
__________
| |
| |
| Orignal |<------------- Orignal Refernce
| Object |
| |
|__________|
__________
| |
| |
| Method |<------------- Method Refernce
| Object |
| |
|__________|
Надеюсь, это поможет