Присваивание и логические операторы java

112
09 января 2020, 01:00

Во время написания одной программы возник интересный вопрос: "Можно ли как-то присвоить нескольким переменным одинаковое значение с помощью одного оператора присваивания?" То есть если я, например, не хочу каждой переменной отдельно присваивать каждое значение?

Answer 1

Или так (необходимо отметить, что данный способ работает только для примитивных типов):

int a, b, c;
a = b = c = 1;
System.out.println(a + " " + b + " " + c);
// выведет 1 1 1
// изменяем значение одной из переменных
c = 2;
System.out.println(a + " " + b + " " + c);
//выведет 1 1 2, т.е. значение "с" изменилось, а остальных - нет

В случае работы с ссылочными типами будет совсем другая картина:

class Proba{
    public static void main(String[] args){
        MyClass a, b, c; //объявляем три ссылки типа MyClass
        a = b = c = new MyClass();
        //присваиваем полю "x" значение 1 в ссылке "а"
        a.setX(1);
        //при выводе всех значений "x" получаем одинаковые значения везде
        System.out.println(a.getX() + " " + 
            b.getX() + " " + c.getX());
        //присваиваем значение 2 полю "x" в ссылке "b"
        //получаем 2 при выводе "x" во всех ссылках
        b.setX(2);
        System.out.println(a.getX() + " " +
            b.getX() + " " + c.getX());     
    }
}
class MyClass{
    private int x;
    public void setX(int param){
        x = param;
    }
    public int getX(){
        return x;
    }
}

В данном случае все три ссылки "a", "b" и "c" являются типом класса MyClass и указывают на один и тот же объект (экземпляр этого класса). Значение поля "x" в данном классе будет единственным, хотя обращаться к нему можно через методы по любой ссылке a.getX(), b.getX() или c.getX(). При выводе возвращаемых значений этих методов "x" будет один и тот же. При изменении поля "x" в данном классе по любой из ссылок "a", "b" или "с" значение поля "x" будет снова одно, т.к. объект всего один, на него всего лишь указывают (в данном примере) три переменные одинакового типа.

Answer 2

Разве что так

int a;
int b;
a = b = 42;
READ ALSO
Android. Где хранить изменяемые строковые ресурсы?

Android. Где хранить изменяемые строковые ресурсы?

Есть готовое приложение учета зарплатыВ нем есть 5 категорий - зарплата, аванс, больничные, отпускные, иное

125
Cannot infer arguments - Java

Cannot infer arguments - Java

Вот создаю ArrayList для массивов, чтобы потом удалить в них значения, но у третьей строчки выскакивает ошибка у <> - Cannot infer argumentsЧто за непонятная...

139
Discord JDA. Дать юзерам Permission на созданном канале

Discord JDA. Дать юзерам Permission на созданном канале

Я создаю канал с помощью команды + упомнинанием от 1 и более участника сервер и хочу сделать его частным, и чтобы только определенные люди...

127
Как добавить LinearLayout (horizontal) программно в LinearLayout (vertical)? [закрыт]

Как добавить LinearLayout (horizontal) программно в LinearLayout (vertical)? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он был сосредоточен только на одной проблеме, отредактировав его

122