Новое целое число против valueOf

Мне нужен объект из строки запроса, и я ненавижу много кода. Это может быть не самое надежное во вселенной, но это всего лишь несколько строк кода.

var q = {};
location.href.split('?')[1].split('&').forEach(function(i){
    q[i.split('=')[0]]=i.split('=')[1];
});

URL-адрес, такой как this.htm?hello=world&foo=bar, создаст:

{hello:'world', foo:'bar'}
69
задан Charles Morin 25 October 2016 в 18:02
поделиться

2 ответа

Integer.valueOf реализует кэш для значений от -128 до +127. См. последний параграф спецификации языка Java, раздел 5.1.7, где объясняются требования к боксу (обычно реализуемому в терминах методов .valueOf).

http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.7

71
ответ дан 24 November 2019 в 13:53
поделиться

Из JavaDoc:

public static Integer valueOf(int i) Возвращает экземпляр Integer, представляющий указанное значение int. Если новый экземпляр Integer не требуется, этот метод обычно следует использовать вместо конструктора Integer(int), так как этот метод, вероятно, обеспечит значительно лучшую производительность пространства и времени за счет кэширования часто запрашиваемых значений.

ValueOf обычно используется для автобоксинга и поэтому (когда используется для автобоксинга) кэширует по крайней мере значения от -128 до 127, чтобы следовать спецификации автобоксинга.

Вот реализация valueOf для Sun JVM 1.5.? Посмотрите на весь класс, чтобы увидеть, как инициализируется кэш.

public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset];
    }
    return new Integer(i);
}
26
ответ дан 24 November 2019 в 13:53
поделиться
Другие вопросы по тегам:

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