一、
public class Main {
private static class Dog {
private Dog(String name) {
this.name = name;
}
private String name;
}
public static void main(String[] args) {
List<Dog> src = new ArrayList<Dog>();
List<Dog> dest = new ArrayList<Dog>();
src.add(new Dog("aaa"));
for(Dog dog : src) {
dest.add(dog);
}
Dog dog = dest.get(0);
dog.name = "bbb";
System.out.println(src.get(0).name);
}
}
上面代碼會輸出aaa還是bbb?
二、
public class Main {
public static void main(String[] args) {
List<String> src = new ArrayList<String>();
List<String> dest = new ArrayList<String>();
src.add("aaa");
for(String s : src) {
dest.add(s);
}
String s = dest.get(0);
s = "bbb";
System.out.println(src.get(0));
}
}
與第一道差不多,這次是輸出aaa還是bbb?
三、
public class Main {
private static class Dog {
private String name;
private Dog(String name) {
this.name = name;
}
@Override
public int hashCode() {
return name.hashCode();
}
}
public static void main(String[] args) {
Map<Dog, String> map = new HashMap<Dog, String>();
Dog dog = new Dog("haha");
map.put(dog, "I am haha");
System.out.println(map.containsKey(dog));
dog.name = "gaga";
System.out.println(map.containsKey(dog));
}
}
真的會輸出兩次true嗎?
四、
public class Main {
public static void main(String[] args) {
Long i1 = 150L;
Long i2 = 150L;
System.out.println(i1 == i2);
Long i3 = 100L;
Long i4 = 100L;
System.out.println(i3 == i4);
}
}
用到的知識點:
一:淺拷貝
二:String的不可變性
三:HashMap底部實現原理
四:Integer、Long等類的緩存機制及其原因
轉載請註明原文地址:http://blog.csdn.net/u012619640/article/details/50452794
本博客已停止更新,轉移到微信公衆號上寫文章,歡迎關注:Android進階驛站