Сравнение производительности цикла DataTable

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
12
задан Gray 17 October 2013 в 19:44
поделиться

1 ответ

Нет, это не может сделать этого, так как нет никакого способа выражать постоянный со временем для значения.

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

Но в этом случае Вы свободны добавить новые строки к таблице данных как часть Вашего цикла и таким образом Вам решать сделать ту гарантию, в способе, которым Вы сделали это.

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

В случае переменной, где компилятор может просто посмотреть на код цикла и видеть, что эта конкретная переменная не заменяется, она могла бы сделать это и загрузить значение в регистр прежде, чем запустить цикл, но любое увеличение производительности от этого, скорее всего, будет незначительно, если Ваше тело цикла не будет пусто.

Заключение: Если Вы знаете, или готово принять, что индекс цикла конца является постоянным на время цикла, поместите его в переменную.


Править: Перечитайте свое сообщение, и да, Вы могли бы видеть незначительное увеличение производительности для своих двух случаев также, потому что Дрожание оптимизирует код. Дрожание могло бы оптимизировать Ваше чтение индекса конца в прямой доступ к переменной в таблице данных, которая содержит количество строки, и чтение памяти не все это дорогое так или иначе. Если бы, с другой стороны, читая то свойство была очень дорогая операция, то Вы видели бы более noticable различие.

6
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: