Почему toBinaryString не является методом экземпляра в классе Integer?

Простой вопрос дизайна.

Пример кода:

    Integer int1 = new Integer(20);     
    System.out.println(Integer.toBinaryString(int1));

Почему дизайн JDK не похож на следующее? поэтому функция toBinaryString возвращает желаемый результат?

    System.out.println(int1.toBinaryString());

Помимо широкого использования статической функции, каковы другие причины такого подхода к дизайну? Используют ли они какой-либо конкретный шаблон проектирования? Если это так, то какой шаблон?

Ответ 1

Ваш пример кода создает экземпляр Integer, а затем распаковывает его. Там нет необходимости:

int int1 = 20;
String binary = Integer.toBinaryString(int1);

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

Другими словами: чтобы избежать ненужного создания объектов.

Ответ 2

Это связано с тем, что вы не можете иметь два метода с тем же именем, один статический и один экземпляр. Имея два разных имени метода для той же функции снова, было бы запутанным.

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

Ответ 3

Назад, когда этот метод был добавлен, в JDK1.0.2 не было автобоксинга, а JVM были намного медленнее, чем сейчас. Я полагаю, что использование этого статического метода позволяет легко конвертировать как int, так и Integer в двоичную строку и без необходимости создавать новый экземпляр Integer только для преобразования int в двоичный файл.

Ответ 4

int, char, double... это тип данных по умолчанию, это не объект. Метод должен быть частью Object not datatype.

Такой статический метод более эффективен, чем метод экземпляра.