java 關於值引用、地址引用的問題

8種基本引用類型java

  四種整數類型(byte、short、int、long)this

  兩種浮點數類型(float、double)spa

  一種字符類型(char)code

  一種布爾類型(boolean)對象

  以及如String, final類型的數據類型時。blog

在方法調用時,屬於值傳遞,在方法中改變了值以後,原始值不會改變。get

除了以上以外的數據類型,如自定義的對象,Map,List之類的引用,都是地址引用。class

以下demo:import

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author liyuechao *
 * @since:2017年8月10日 下午5:12:07
 */
public class Test {
    public static void main(String[] args) {
        List<A> list = new ArrayList<>();
        A a = new A();
        a.setName("a");
        A b = new A();
        b.setName("b");
        list.add(a);
        list.add(b);
        Map<String, List<A>> map = new HashMap();
        map.put("ha", list);
     // null的時候不會改變,由於沒有具體的指向地址 map.put(
"he", null); List<A> lista = map.get("ha"); List<A> listc = map.get("ha"); List<A> listd = map.get("he"); for (A a2 : lista) { modi(a2); } setValue(listd); List<A> listb = map.get("ha"); for (A a2 : listb) { System.out.println(a2.getName()); } for (A a2 : listc) { System.out.println(a2.getName()); } for (A a2 : listd) { System.out.println(a2.getName()); } } public static void modi(A a) { a.setName("x"); } public static void setValue(List<A> list) { if (list == null) list = new ArrayList<>(); A a = new A(); a.setName("y"); list.add(a); } } /** * @author liyuechao * * @since:2017年8月10日 下午5:12:31 */ public class A { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }

 運行結果:List

相關文章
相關標籤/搜索