Java中的方法参数传递方式

最近在系统学习Core Java,Java中的数据类型分为两种,第一种是基本数据类型(数字型和布尔型),第二种是类类型(即对象),起初,我以为第一种类型的参数是按值传递,第二种是按引用传递,但在学习Core Java的过程中,我发现这是错误的,先抛出最终结论:在Java中,所有的方法参数都是按值传递的!!!下面来进行解释。

第一种类型的参数是按值调用很好理解,主要是要说明第二种类型的参数也是按值调用的,看下面的一段程序:

1 public static void swap(A x, A y)
2 {
3   A temp = x;
4   x = y;
5   y = temp;
6 }

如果是按引用传递,那么这个方法就应该能够实现数据交换(a引用Rose,b引用Jack):

A a = new A("Jack");
A b = new A("Rose");
swap(a, b);

但实际上,swap方法并没有改变a和b的引用,swap参数的x和y初始化为a和b的引用拷贝,这个方法交换的是x和y的引用,最终,白费力气,方法结束的时候x和y被丢弃了,a和b仍然引用之前引用的对象。如下图所示:

这个过程说明:Java中,对对象采用的不是按引用传递,实际上,对象引用进行的是值传递。

时间: 2024-12-15 06:42:32

Java中的方法参数传递方式的相关文章

Java学习(八)方法参数传递方式

package cn.com.postel.wbb.javaextends; /** * java中的方法的参数传递方式只有一种:值传递. * 所谓的值传递就是将实际数值复制一份传入到方法内,而参数本身不会受到影响. * @author wubinbin * */ public class ValueTrans { public static void main(String[] args) { int a = 1; int b = 2; swap(a, b); System. out.prin

java方法参数传递方式只有----值传递!

在通常的说法中,方法参数的传递分为两种,值传递和引用传递,值传递是指将实际参数复制一份传递到方法中, 在方法中的改动将不会影响到实际参数本身,而引用传递则是指传递的是实际参数本身,在方法中的改动将会影响到实 际参数本身.但是,在java中只有值传递,没有引用传递!那么,为什么当方法参数是基本数据类型时表现是值传递, 而当是引用类型时表现的是引用传递形式呢? Java内存区域中含有java堆和虚拟机栈两个内存区域(并不是只是将java内存区分为这两个内存区域,此外还有程 序计数器,本地方法栈以及方

Java中的方法重写 与 final关键字

Java中的方法重写 与 final关键字 以下程序是否存在错误? class Base { private final void method() { System.out.println("In Base..."); } } class Sub extends Base { public void method() { System.out.println("In Sub..."); } } 答案 正确的. 使用final关键字可以声明类.成员变量和成员方法,一

java中的方法理解

1.java 方法的格式<修饰符><返回类型><方法名>(<参数列表>)返回类型说明了方法的返回值类型,如果不需要返回值,返回类型应该声明为void,需要返回值的,必须与说明的返回类型相同.2.如果一个方法的参数定为不定参数的话,这个参数可以根据参数个数动态生成一个数组,然后传入方法执行.不定参数有两个规定:方法的参数列表中最多只有一个不定长度的参数:不定长度的数组的位置必须是最后一个参数.不然不能通过编译.3.java中每个方法的返回值,有且仅有一个,因为

JavaSE学习笔记(四)——Java中的方法

一.  Java中的方法 需求:求整数10和整数3的乘积,然后在求整数2000和整数300的乘积. public class MethodTest01 { public  static void main(String[] args){ int  i = 10; int  j = 3; int  k = i * j; System.out.println("i  * j = " + k); int  l = 2000; int  m = 300; int  n = l * m; Sys

Java基础---如何定义Java中的方法(三十五)

如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴 2. 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void :如果方法具有返回值,则需要指定返回值的类型,并且在

JAVA中toString方法的作用

因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法 总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法 回答补充: 写这个方法的用途就是为了方便操作,所以在文件操作里面可用可不用 例子1: public class Orc { public st

Java中的可变参数以及foreach语句

Java中的可变参数的定义格式如下: 返回值类型  方法名称(类型 ... 参数名称){} foreach语句的格式如下: for ( 数据类型  变量名称 :数据名称){ ... } public class NewDemo01 { public static void main(String[] args) { // TODO Auto-generated method stub fun(); fun(1); fun(1,2,3,4); } public static void fun(in

java中可变长参数

1 ** 2 * Created by Lenovo on 2017/12/10. 3 * java中可变长参数 4 */ 5 public class reflect04 { 6 7 //m1有一个int类型的可比变长参数 8 //m1在调用的时候实参可以是0-N个 9 public static void m1(int... a){ 10 System.out.println("int型可变长参数执行...."+a); 11 } 12 13 //如果有可以精确匹配的方法则调用该方法