Подскажите пожалуйста, а как клонируется String в java. В задаче мы вызываем getName(), тут же тоже ссылка копируется если name?
Артем
41 уровень
Клонирование String
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
16 августа 2021, 15:05
Лучше прикладывать код.
0
Артем
16 августа 2021, 19:15
public class Solution {
public static void main(String[] args) {
Tree tree = new Tree("willow", new String[]{"s1", "s2", "s3", "s4"});
Tree clone = null;
try {
clone = (Tree) tree.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println(tree);
System.out.println(clone);
System.out.println(tree.branches);
System.out.println(clone.branches);
}
public static class Plant {
private String name;
public Plant(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public static class Tree extends Plant implements Cloneable {
private String[] branches;
public Tree(String name, String[] branches) {
super(name);
this.branches = branches;
}
public String[] getBranches() {
return branches;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return new Tree(getName(), branches == null ? null : branches.clone());
}
}
}
0
Артем
16 августа 2021, 19:15
метод clone()
0
Ksenia Volkova Java Developer в DXC Master
16 августа 2021, 20:34
Класс String - immutable, неизменяемый.
Ты не можешь изменить существующий экземпляр String, только создать новый. А если ты полю одного объекта присвоишь новую ссылку, на клоне это никак не отразится - у него по-прежнему будет ссылка на исходный объект-строку.
Ты можешь добавить в класс Plant сеттер и проверить
+2
Артем
16 августа 2021, 20:50
Да, спасибо, я уже понял, и сделал проверку
0
Артем
16 августа 2021, 14:50
Тут он с модификатором ptivate, а если бы был public и его изменить у исходного объекта, или если бы был сеттер и через него поменять, то у клона тоже поменяется?
0