Java基礎問題(一)

一、

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進階驛站
Android進階驛站

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章