笔记66-android传值方式验证

来源:互联网 发布:淘宝耐克阿迪正品店 编辑:程序博客网 时间:2024/05/16 13:43

淘宝提交订单时,可以选择快递方式,不同的快递,价格不同。当快递价格发生变化时,订单价格也要发生变化。

一、值传递和引用传递

值传递:传递进方法的参数是值的拷贝,传递后两者就互不相关了。

引用传递:传递的是变量对应的内存空间的地址,方法中能够改变传递的参数值。

二、java用哪种方式

对于基本数据类型(整型、浮点型、字符型、布尔型等),传值;对于引用类型(对象、数组、list等),传引用。String例外,它不是简单类型,却用到是值传递方式;而StringBuffer是引用传递方式。

基本类型的包装类也是值传递。

三、代码验证
1、String是值传递

Button btn2=(Button) findViewById(R.id.btn2);btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String str="aaa";initBtn(str);Toast.makeText(getApplicationContext(), str, 1).show();}});private void initBtn(String str) {str="bbb";}
输出str为"aaa"。

2、list是引用传递

Button btn2=(Button) findViewById(R.id.btn2);btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {List<String> ll=new ArrayList<String>();ll.add("aaa");ll.add("aaa");initBtn(ll);Toast.makeText(getApplicationContext(), ll.get(0), 1).show();}});private void initBtn(List<String> ll) {ll.set(0, "bbb");}
输出为"bbb"。
四、赋值方式

public void onClick(View v) {List<String> l1=new ArrayList<String>();l1.add("a");l1.add("b");l1.add("c");List<String> l2=new ArrayList<String>();//l2.addAll(l1);l2=l1;l1.set(1, "c");Toast.makeText(getApplicationContext(), l2.get(1), 1).show();}
如果用l2.addAll(l1),那么l2.get(1)="c";如果用l2=l1,那么l2.get(1)="b"。说明如果直接用"="赋值的话,编译器会作内存优化,使得这两个list引用同一个地址。

0 0
原创粉丝点击