JAVA基础知识回顾之---方法中的参数传递
来源:互联网 发布:阿里云ecs远程桌面 编辑:程序博客网 时间:2024/06/08 05:07
关于JAVA中方法的参数传递,到底是传递的地址还是引用的值,这个困惑了笔者很久,现在总算弄明白了,
首先,对于基本数据类型,传递参数时作为形参,传递的肯定是引用值,纠结的就在于引用数据类型
首先来看看,数组作为参数传递时,传递的到底是地址还是值,这个笔者开始真心没弄明白,就是JAVA基础知识不够牢固。
首先我们来看下面的代码:
public static void testArray(int[] a){ for(int i = 0;i<a.length;i++){ a[i] = 1; } System.out.println("In the method:"); for(int i = 0;i<a.length;i++){ System.out.print(" "+a[i]); } } public static void main(String[] args) { int[] a = {2,3,4,5}; System.out.println("Before the method..."); for(int i =0 ;i<a.length;i++){ System.out.print(" "+a[i]); } System.out.println(); Operator.testArray(a); System.out.println(); System.out.println("After the method..."); for(int i =0 ;i<a.length;i++){ System.out.print(" "+a[i]); } }
这三个位置分别在数组作为参数传递之前、方法中、方法后进行了输出,下面是得到的结果:
Before the method...
2 3 4 5
In the method:
1 1 1 1
After the method...
1 1 1 1
2 3 4 5
In the method:
1 1 1 1
After the method...
1 1 1 1
从上面的输出结果可以看出,数组作为参数传递的时候传递的是引用地址而不是值,所以当在方法中修改了其中的值之后,对应地址的值也会跟着改变,所以输出的就是修改之后的值。
2、到了这里,笔者又思考一个问题,是不是对象作为参数传递时都是传递的地址呢,来看下面的代码:
public static void testObject(Person person){ person.setName("11"); person.setNumebr(123); }Person p = new Person(); p.setName("22"); p.setNumebr(456); System.out.println("Before:"+p.getName()+" "+p.getNumebr()); Operator.testObject(p); System.out.println("After:"+p.getName()+" "+p.getNumebr());
下面来看输出结果:
Before:22 456
After:11 123
After:11 123
从上面的输出可以看出,对象作为参数传递时,传递的也是地址
3、最后,再来看看对象数组作为参数传递时传递的是什么
来看下面的代码:
public static void testListObject(List<Person> persons){for(Person person : persons){person.setName("zhangsan");person.setNumebr(000);}}
List<Person> persons = new ArrayList<Person>();persons.add(new Person("1",123));persons.add(new Person("2",456));persons.add(new Person("3",789));persons.add(new Person("4",012));System.out.println("Before...");for(Person person : persons){System.out.println(person.getName()+" "+person.getNumebr());}System.out.println();Operator.testListObject(persons);System.out.println("After...");for(Person person : persons){System.out.println(person.getName()+" "+person.getNumebr());}
下面来看输出结果:
Before...
1 123
2 456
3 789
4 10
After...
zhangsan 0
zhangsan 0
zhangsan 0
zhangsan 0
1 123
2 456
3 789
4 10
After...
zhangsan 0
zhangsan 0
zhangsan 0
zhangsan 0
从上面的结果可看出,对象数组作为形参传递时也是传递的地址.
0 0
- JAVA基础知识回顾之---方法中的参数传递
- Java方法中的参数传递方式
- java中的方法参数的传递机制
- JAVA参数在方法中的传递过程
- Java参数在方法中的传递
- Java参数在方法中的传递
- Java科普之基础知识回顾
- java之给方法传递对象参数
- JAVA基础之方法参数传递
- java中的方法参数传递机制---值传递
- java中的参数传递
- java中的参数传递
- Java中的参数传递
- java中的参数传递
- Java中的参数传递
- java中的参数传递
- java中的参数传递
- JAVA中的参数传递
- 两分钟彻底让你明白Android Activity生命周期(图文)
- 【iOS XMPP】使用XMPPFramewok(四):收发消息
- Java 线程池学习--线程池ThreadPoolExecutor使用简介
- JQuery EasyUi之界面设计——前言与界面效果(一)
- 织梦后台登陆不上提示验证码不正确
- JAVA基础知识回顾之---方法中的参数传递
- 【iOS XMPP】使用XMPPFramewok(五):好友列表
- H265 profile
- Linux Mint 16安装 Acrobat reader
- nova中增加数据库表isolated_schedule-openstack-ice
- Java 线程池学习--线程池实例讲解
- 黑马程序员—学习日记1概述
- liferay_MVCPortlet数据回显
- vl_Feat---vl_slic的使用