Вопрос знатокам Java 1.6х
Добавлено: 13 мар 2008, 20:10
Почему объекты класса String ведут себя не совсем как reference variables?
Мне это интересно, чтобы лучше объяснять моим студентам звериную сущность ООП на Джаве.
Итак, пример.
Пусть, a1, и а2 - объекты некоторого класса.
Я делаю с ними следующее:
1. Инициализирую с индивидуальными параметрами типа String: "one" и "two". Если, скажем это класс JLabel, то эти значения - текстуальные надписи. Если это объекты класса String, то это содержимое строк.
2. Связываю два объекта присваиванием: а1 = а2;
3. Меняю техт в объекте а2; если это String, то пишу: а2 = "changed"; если это JLabel, то использую а2.setText("changed");
В результрате получаю, когда объекты а1 и а2 оба типа String, содержимое а1 остаётся неизменным ("one"). Если же оба объекта имеют тип JLabel, то изменение текста в а2 влечёт изменение текста в а1; т.е. а1.getText() возвращает "changed". Последнее я считаю правильным поведением объектa, который является reference variable.
В связи с этим возникает вопрос, почему объект типа String ведёт себя как primitive variable? То есть иными словами, получается, что строка символов совсем не объект.
Мне это интересно, чтобы лучше объяснять моим студентам звериную сущность ООП на Джаве.
Итак, пример.
Пусть, a1, и а2 - объекты некоторого класса.
Я делаю с ними следующее:
1. Инициализирую с индивидуальными параметрами типа String: "one" и "two". Если, скажем это класс JLabel, то эти значения - текстуальные надписи. Если это объекты класса String, то это содержимое строк.
2. Связываю два объекта присваиванием: а1 = а2;
3. Меняю техт в объекте а2; если это String, то пишу: а2 = "changed"; если это JLabel, то использую а2.setText("changed");
В результрате получаю, когда объекты а1 и а2 оба типа String, содержимое а1 остаётся неизменным ("one"). Если же оба объекта имеют тип JLabel, то изменение текста в а2 влечёт изменение текста в а1; т.е. а1.getText() возвращает "changed". Последнее я считаю правильным поведением объектa, который является reference variable.
В связи с этим возникает вопрос, почему объект типа String ведёт себя как primitive variable? То есть иными словами, получается, что строка символов совсем не объект.