Комментарии (6)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Павел
13 уровень
25 апреля, 11:27
Статические vs Обычные методы
Павел
13 уровень
25 апреля, 11:19
Павел
13 уровень
23 апреля, 22:20
"Передача по ссылке"
public class Main {
    public static void main(String[] args) {
        ClassA classA = new ClassA();
        ClassB classB = new ClassB(0);

        System.out.println("Main:\t hashCode(classB)\t   = " + classB.hashCode());

        System.out.println("Main:\t a = " + classB.a);
        classA.up(classB);
        System.out.println("Main:\t up a = " + classB.a);
        classA.down(classB);
        System.out.println("Main:\t down a = " + classB.a);
    }

    public static class ClassA {
        public void up(ClassB classB) {
\\создаем новый объект и работаем с ним по коду ниже, в рамках текущего метода.
            classB = new ClassB(0);
            System.out.println("ClassA:\t up hashCode(classB)   = " + classB.hashCode());
            classB.a++;
            System.out.println("ClassA:\t up a = " + classB.a);
        }

        public void down(ClassB classB) {
            System.out.println("ClassA:\t down hashCode(classB) = " + classB.hashCode());
            classB.a--;
            System.out.println("ClassA:\t down a = " + classB.a);
        }
    }

    public static class ClassB{
        public int a;

        public ClassB(int a) {
            this.a = a;
        }
    }
}
Вывод в консоль:
Main:	 hashCode(classB)	   = 460141958
Main:	 a = 0
ClassA:	 up hashCode(classB)   = 1163157884
ClassA:	 up a = 1
Main:	 up a = 0
ClassA:	 down hashCode(classB) = 460141958
ClassA:	 down a = -1
Main:	 down a = -1
В метод передается ссылка на объект classB со значением 0 переменной а. Поэтому когда внутри методов мы меняем объект classB.a++, мы обращаемся к той самой области памяти, где хранится наш объект. Объекты передаются в методы по ссылке. Копии объектов никогда не создаются автоматически. Но значения переменных-ссылок копируются при присваивании и/или вызове методов!
Павел
13 уровень
23 апреля, 21:55
"Передача по значению" Поведение примитивной переменной при передачи в качестве аргумента метода:
public class Main {
    public static void main(String[] args) {
        ClassA classA = new ClassA();
        int i = 0;
        System.out.println("Main:\t i = " + i);
        classA.up(i);
        System.out.println("Main:\t up i = " + i);
        classA.down(i);
        System.out.println("Main:\t down i = " + i);
    }

    public static class ClassA {
        public void up(int i) {
            i = 0;
            i++;
            System.out.println("ClassA:\t up i = " + i);
        }

        public void down(int i) {
            i--;
            System.out.println("ClassA:\t down i = " + i);
        }
    }
}
Вывод в консоль:
Main:	 i = 0
ClassA:	 up i = 1
Main:	 up i = 0
ClassA:	 down i = -1
Main:	 down i = 0
Переменная i, которая была передана в методы up() и down(), является лишь копией i. И изменение копии никак не повлияло на значение "оригинала". Источник: Методы, их параметры, взаимодействие и перегрузка
Павел
13 уровень
23 апреля, 18:38
Список примитивных типов