首页 > 代码库 > java 关于值引用、地址引用的问题
java 关于值引用、地址引用的问题
8种基本引用类型
四种整数类型(byte、short、int、long)
两种浮点数类型(float、double)
一种字符类型(char)
一种布尔类型(boolean)
以及如String, final类型的数据类型时。
在方法调用时,属于值传递,在方法中改变了值之后,原始值不会改变。
除了以上之外的数据类型,如自定义的对象,Map,List之类的引用,都是地址引用。
如下demo:
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; }}
运行结果:
java 关于值引用、地址引用的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。