Булева функция «исправить». Для чего это? - PullRequest
0 голосов
/ 30 апреля 2020

Так что я не совсем уверен, что делать с этой единственной командой, связанной с логическим значением. Следующий код должен был отображать (true true), но я не знаю, как этому способствует функция «fix»:

public class Example {
    public static void main(String[]args) {
        Example x=new Example();
        x.beginning();
    }

    void beginning() {
        boolean q1=true;
        boolean q2=fix(q1); //here
        System.out.println(q1+" "+q2);
    }

    boolean fix(boolean q1) {     //here again 
        q1=true;
        return q1;
    }
} 

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

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

На первый взгляд, метод fix ничего не дает. Не копируйте этот метод.


Я полагаю, вы нашли этот класс в статье или Q & A, в которых говорится о Java семантике передачи параметров. Весь класс предназначен для демонстрации того, что Java параметры передаются по значению.

Если Java параметры были переданы по ссылке, то присвоение

q1 = true;

в fix будет изменить переменную q1, объявленную в beginning. Это не так, и q1, объявленный в beginning, не изменяется.

Таким образом, реальная цель fix в контексте состоит в том, чтобы продемонстрировать, что не не делай что-нибудь.


Это лучшая версия:

public class Example {
    public static void main(String[]args) {
        Example x = new Example();
        x.beginning();
    }

    void beginning() {
        boolean x1 = false;
        boolean x2 = fix(x1);
        System.out.println(x1 + " " + x2);
    }

    /**
     * If Java is pass by reference, this will "fix" the variable
     * 'x1' in the calling method.
     */
    boolean fix(boolean q) {
        q = true;   // this would change 'x1'
        return q;
    }
} 
0 голосов
/ 30 апреля 2020

Это совершенно бесполезно. fix() всегда возвращает true независимо от того, что ему передано. Он полностью игнорирует входной аргумент. Это может быть эквивалентно записано как:

boolean fix(boolean ignored) {
    return true;
}

Это ничего не делает полезного, и здесь нечему учиться. ¯ \ _ (ツ) _ / ¯

...