Re[5]: Ну так нечестно - Java (код внутри)
От: denis.zhdanov Россия http://denis-zhdanov.blogspot.com/
Дата: 29.12.07 09:58
Оценка:
Здравствуйте, TNL, Вы писали:

TNL>...


TNL>Нет, это два указателя на один объект. Неизменяемый. Размещенный в пуле объектов.

TNL>Все целочисленные типы-обертки для чисел меньше 128 используют пул.

Ну приехали.

  1. Если бы это были ссылки на один и тот же объект, следующий фрагмент кода печатал бы true
    System.out.println(new Integer(1) == new Integer(1)); // prints false

  2. Пул используется при вызове valueOf() (явном или неявном, который генерится при автобоксинге);
    System.out.println(Integer.valueOf(1) == Integer.valueOf(1)); // prints true


TNL>Так же пул используется для строк, данных в кавычках.


Не только для литералов. Там все намного продвинутее.


TNL>...
http://denis-zhdanov.blogspot.com
Re[2]: Ну так нечестно - Java (код внутри)
От: aefimov Россия
Дата: 29.12.07 10:25
Оценка: +1
Здравствуйте, denis.zhdanov, Вы писали:

DZ>Да, с точки зрения логики это неправильно. К сожалению, в джаве многие вещи (в т.ч. базовые) не реализованы так, как должно/не реализованы вообще. Плюс Sun очень заботится об обратной совместимости, т.о. баги, присутствующие в начальной реализации просто не фиксятся в новых версиях, чтобы не сломать существующий код. Это можно считать минусом, можно считать плюсом, в любом случае это надо принять как данность и просто знать такие моменты (напарываться на баги и узнавать о них).


Просто надо помнить, что в Java существует не две, а три базовые штуки. Object и все что от него растёт, примитивы и массивы. И хоть массивы и можно кастить к Object и в JLS явно сказано, что Array extends Object, это (пусть меня тут побьют эксперты) не чистый A extends Object implements Cloneable, Serializable (то, что это специальный хакнутый нечистый Object я лично думаю из-за метода clone, который приведен в JLS — там показан вызов к super.clone, т.е. к нативному методу Object). Я лично думаю, что массивы — это синтетический (несуществующий) класс, поддержанный на нативном уровне JVM и не имеющий никакого специального представления в байткоде. Я имею ввиду полноценное A extends Object. Нету этого.

Хотя вообщем в данном случае Sun просто схалявила. Реализовали для массивов метод clone, но не реализовали equals. А могли в легкую (или нет?) это сделать. Но видимо все дело в том, что это специальными хаками в JNI делается. И нативный метод clone переопределить для массивов можно легко, а вот ненативный equals — как-то совсем не тривиально. Поэтому используется реализация от Object, а она сравнивает ссылки.
Re[6]: Ну так нечестно - Java (код внутри)
От: TNL  
Дата: 29.12.07 10:50
Оценка:
Здравствуйте, aefimov, Вы писали:

A>Здравствуйте, TNL, Вы писали:


J>>>Тоже два указателя на разные объекты.


TNL>>Нет, это два указателя на один объект. Неизменяемый. Размещенный в пуле объектов.

TNL>>Все целочисленные типы-обертки для чисел меньше 128 используют пул.
TNL>>Так же пул используется для строк, данных в кавычках.

A>Вы все перепутали. Это два разных объекта. И это гарантируется оператором new.

A>Пул используется для автобоксинга, но там не new, а valueOf

Хех... Все, пора завязывать с праздниками! Через неделю придется заново алфавит вспоминать ))). Прошу прощения.
Re[7]: Ну так нечестно - Java (код внутри)
От: aefimov Россия
Дата: 29.12.07 11:52
Оценка:
Здравствуйте, TNL, Вы писали:

A>>Вы все перепутали. Это два разных объекта. И это гарантируется оператором new.

A>>Пул используется для автобоксинга, но там не new, а valueOf

TNL>Хех... Все, пора завязывать с праздниками! Через неделю придется заново алфавит вспоминать ))). Прошу прощения.

Наоборот же. С праздниками пора начинать!
Re[6]: Ну так нечестно - Java (код внутри)
От: Аноним  
Дата: 29.12.07 19:33
Оценка:
TNL>>Так же пул используется для строк, данных в кавычках.

DZ>Не только для литералов. Там все намного продвинутее.


И как же там делается? Ссылку можно?
Re[7]: Ну так нечестно - Java (код внутри)
От: denis.zhdanov Россия http://denis-zhdanov.blogspot.com/
Дата: 29.12.07 20:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И как же там делается? Ссылку можно?


здесь
http://denis-zhdanov.blogspot.com
Re[8]: Ну так нечестно - Java (код внутри)
От: Аноним  
Дата: 30.12.07 10:01
Оценка:
Здравствуйте, denis.zhdanov, Вы писали:

DZ>Здравствуйте, Аноним, Вы писали:


А>>И как же там делается? Ссылку можно?


DZ>здесь


ОК, почитаю http://en.wikipedia.org/wiki/String_intern_pool и http://mindprod.com/jgloss/interned.html
Re[6]: Ну так нечестно - Java (код внутри)
От: Cyberax Марс  
Дата: 30.12.07 10:17
Оценка: 2 (1)
Здравствуйте, denis.zhdanov, Вы писали:

DZ>Ну приехали.

DZ>

    DZ>
  1. Если бы это были ссылки на один и тот же объект, следующий фрагмент кода печатал бы true
    DZ>
    DZ>System.out.println(new Integer(1) == new Integer(1)); // prints false
    DZ>

    DZ>
  2. Пул используется при вызове valueOf() (явном или неявном, который генерится при автобоксинге);
    DZ>
    DZ>System.out.println(Integer.valueOf(1) == Integer.valueOf(1)); // prints true
    DZ>

    DZ>

Едем дальше:
System.out.println(Integer.valueOf(1) == Integer.valueOf(1)); // prints true. WTF???


Можно посмотреть в метод Integer.valueOf:
    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);
    }


Так что все становится понятно.
Sapienti sat!
Re[5]: Ну так нечестно - Java (код внутри)
От: Аноним931 Германия  
Дата: 01.01.08 10:33
Оценка: +1
R>Тогда наверно надо начать с претензии: почему нет java.lang.Array<T>, как это например сделали в Scala.

Нет, начать, или, вернее, продолжить следует признанием того, что ты в своем первом посте пронес полнейшую чушь, а потом на протяжении всей ветки пытался эту чушь защищать
"Больше 100кмч можно ехать на автобане в любом ряду кроме правого крайнего" (c) pik
"В германии земля в частной собственности" (c) pik
"Закрывать школы, при нулевой смертности среди детей и подростков, это верх глупости" (c) Abalak
Re: Ну так нечестно - Java (код внутри)
От: Аноним931 Германия  
Дата: 01.01.08 10:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>int []a={1};

А>int []a1={1};
А>System.out.println( a.equals(a1) ); <--- false
А>System.out.println( Arrays.equals(a,a1) ); <--- true

А>где справедливость?


Действительно, тупо сделано Sun'ом.
"Больше 100кмч можно ехать на автобане в любом ряду кроме правого крайнего" (c) pik
"В германии земля в частной собственности" (c) pik
"Закрывать школы, при нулевой смертности среди детей и подростков, это верх глупости" (c) Abalak
Re[6]: Ну так нечестно - Java (код внутри)
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 02.01.08 10:24
Оценка:
Здравствуйте, Аноним931, Вы писали:

А>Нет, начать, или, вернее, продолжить следует признанием того, что ты в своем первом посте пронес полнейшую чушь, а потом на протяжении всей ветки пытался эту чушь защищать

Конкретно, с чем не согласны-то и где-чего я пытался защищать?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.