Java方法传递参数说明
来源:互联网 发布:ubuntu无法切换输入法 编辑:程序博客网 时间:2024/05/17 13:41
我们都知道,Java中对于基本数据类型作为方法参数时,都是值传递。
那么对象作为方法的参数,又是传递的什么呢?
java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类型,如int等,另外一种类型是OBJECT,对象。详细说一下方法参数是对象的,JAVA方法参数传对象,传的是对这个对象引用的一份拷贝,即地址值,跟原来的引用都是指向同一个对象。所以说,JAVA方法参数传的都是值。
也可以说当方法参数是对象时,传递的是引用,只是它并不是传递的对象的原始引用,而是原始引用的一个拷贝。也就是说当将对象作为参数传递给方法后,就会有两个引用,指向同一个对象地址。
程序一 传的对象值是改变的。
- public class Test {
- public Test() {
- int[] count = { 5 };
- change(count);
- System.out.println(count[0]);
- }
- public void change(int[] counts) {
- counts[0] = 6;
- System.out.println(counts[0]);
- }
- public static void main(String[] args) {
- Test t = new Test();
- }
- }
public class Test { public Test() { int[] count = { 5 }; change(count); System.out.println(count[0]); } public void change(int[] counts) { counts[0] = 6; System.out.println(counts[0]); } public static void main(String[] args) { Test t = new Test(); } }
程序一中,输出结果都是6,change(count); 把对象的一份引用拷贝传给change(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。
程序二 传的对象值不改变
- class Foo {
- int i = 0;
- }
- public class A {
- public static void main(String args[]) {
- Foo f = new Foo();
- add(f);
- System.out.println(f.i);
- }
- public static void add(Foo f) {
- f = new Foo();
- f.i++;
- }
- }
class Foo { int i = 0; } public class A { public static void main(String args[]) { Foo f = new Foo(); add(f); System.out.println(f.i); } public static void add(Foo f) { f = new Foo(); f.i++; } }
输出结果是0
程序2中,也是传一份引用的拷贝,但在 add()方法中,f=new Foo(); new出了一个新的对象,所以引用的拷贝指向了一个新的对象。原来的引用还是指向原来的对象,所以原来的值还是没有改变。
从这一点就可以看出,确实产生了一个引用的拷贝。
程序三 String不改变,数组改变
- public class Example {
- String str = new String("good");
- char[] ch = { 'a', 'b', 'c' };
- public static void main(String args[]) {
- Example ex = new Example();
- ex.change(ex.str, ex.ch);
- System.out.print(ex.str + " and ");
- Sytem.out.print(ex.ch);
- }
- public void change(String str, char ch[]) {
- str = "test ok";
- ch[0] = 'g';
- }
- }
public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; public static void main(String args[]) { Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + " and "); Sytem.out.print(ex.ch); } public void change(String str, char ch[]) { str = "test ok"; ch[0] = 'g'; } }
程序3输出的是 good and gbc.
String 比较特别,是因为java在传string的时候把string当成基本类型来处理 。所以值是不变的。
- Java方法传递参数说明
- java方法参数传递
- Java方法参数传递
- Java 方法参数传递
- Java方法参数传递
- Java方法参数传递
- java方法参数传递
- Java 方法中参数传递
- java方法参数传递问题
- java 方法的参数传递
- Java方法的参数传递
- Java 方法参数 值传递
- Java--方法参数的传递
- Java方法的参数传递
- Java方法的参数传递
- JAVA的方法参数传递
- JAVA方法参数传递详解
- java方法参数的传递
- Java程序员学习Flex和BlazeDS的十三个理由
- Linux 信号signal处理机制
- 蒙古人的战争
- CSDN博客频道“移动开发那点事”——主题征文活动(已结束)
- Wind IDE简单设置
- Java方法传递参数说明
- C# in smart device
- 忘记oracle的sys用户密码怎么修改
- 解决Ubuntu12.04 出现“Ubuntu is running in low-graphics mode?”问题
- onActivityResult在android中的用法
- [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
- c++ HelloWord
- 那位大侠有,SQL Server 2008日志解析的方案
- 第八章 Eclipse中的Hibernate数据库开发