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

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

пример кода:

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

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

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

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

4 ответов


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

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

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

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


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

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


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


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

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