美文网首页
java 方法传参

java 方法传参

作者: 洒了油 | 来源:发表于2018-01-09 18:10 被阅读0次

java方法参数的传递过程,是一个值的复制过程而非传递过程:

1)参数类型为基本类型时,复制的是基本类型的值变量

2)参数类型为引用类型,复制的是引用变量

这是一段测试代码(1)

public static void main(String[] args) {

A a = new A(1);//对象1

swap(a);

System.out.println(a.getA());

}

public static void swap(A a){

System.out.println(a);

a=new A(2);//对象2

System.out.println(a);

}

证明:java方法参数的传递过程,是一个值的复制过程而非传递过程

如果传参过程是引用变量的传递,那么,经过swap方法后,a引用的应该是对象2的地址;然而结果并不是,在主方法中打印的值仍然为对象1中的属性值。

由此可证明方法传参过程是 值 (或引用变量)的复制过程。

这恰恰解释了一直困扰我的一个现象:

在方法中将对象的引用作为参数,方法体中对该变量作属性修改,会真实生效。而Integer\ String 等类型的变量作修改时却不生效。 那是因为我们自定义的对象提供了对属性修改的支持,而Integer String 等对象的value声明为final的,每次赋值操作会new一个新的对象,因此并没有修改之前引用对象的值。

所以:java方法参数的传递过程,是一个值的复制过程而非传递过程。

代码片段(2)

public class foo {

public static void main(String sgf[]) {

StringBuffer a=new StringBuffer(“A”);

StringBuffer b=new StringBuffer(“B”);

operate(a,b);

System.out.println(a+”.”+b);

}

static void operate(StringBuffer x,StringBuffer y) {

//这是在x引用的对象内容,更改会生效。由于main方法里的a变量也引用了该对象

x.append(y);

//由于参数是变量的复制,因此y=x并未将main方法中的b变量改变

y=x;

}

}

//输出结果是 AB.B

相关文章

  • Mybatis mapper文件中传递多个参数的4种方式

    方法1:顺序传参法 方法2:@Param注解传参法 方法3:Map传参法 方法4:Java Bean传参法

  • java 方法传参

    java方法参数的传递过程,是一个值的复制过程而非传递过程: 1)参数类型为基本类型时,复制的是基本类型的值变量 ...

  • Shader传参

    java->shader传参

  • spring 传参为json,方法参数为java对象(带Date

    当Controller中方法的参数是java对象,但传参为json对象时。spring内部会将json对象转换为参...

  • JavaSE之方法

    五、方法 目录:何谓方法、方法的定义及调用、方法重载、命令行传参、可变参数、递归 1.什么是方法? Java方法是...

  • spring mvc学习

    controller传参GET方法传参@requestParam(value="s",requried=false...

  • Java 参数传递

    Java方法传参方式记住了两点。基本上不会犯错误。 方法内修改基础数据类型(数字类型或布尔类型)不会改变方法外的参...

  • Java传参

    Java中传递参数,要么传递的是基本数据类型的值的副本,要么传递的是引用数据类型的引用(String类型属于引用数...

  • Java基础整理(二)

    Java方法的几种类型 无参无返回值的方法 无参有返回值的方法 有参无返回值的方法 有参有返回值的方法 Java ...

  • vue路由传参

    原生JS 传参 Vue 传参 使用 传参数 第一种方法 第二种方法 点击事件传参 第三种...

网友评论

      本文标题:java 方法传参

      本文链接:https://www.haomeiwen.com/subject/ivtrnxtx.html