java中关于方法参数的介绍

要了解Java中参数传递的原理,首先你要先知道按值传递和按引用传递的区别。
按值传递表示方法接受的是调用者提供的值,按引用传递表示方法接受的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。而Java程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝。下面我将举一些实例来具体说明:

#基本数据类型

public static void main(String[] args) { // TODO Auto-generated method stub int a=10,b=20; swap(a,b); System.out.println(a+'-------'+b); } public static void swap(int a,int b) { int temp=a; a=b; b=temp; }

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

其结果为

原理相当于:
执行swap之前:

执行swap之后:

从图中可以看出:执行swap前后,实参ab并没有改变。改变的只是形参ab,而形参ab在执行完swap之后就被撤销了(局部变量在方法执行结束后被撤销)。所以最后a=10,b=20;

#类类型

类类型直接传递
public class scdn {

public static void main(String[] args) {
// TODO Auto-generated method stub
employee tom=new employee();
tom.setId(10);
employee jarry=new employee();
jarry.setId(20);
System.out.println(tom.getId()+'-------'+jarry.getId());
}
public static void swap(employee a,employee b) {
employee temp=a;
a=b;
b=temp;
}

}
class employee{
private int id;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

}123456789101112131415161718192021222324252627282930123456789101112131415161718192021222324252627282930

结果为

其原理和上面差不多。

类类型通过方法传递
public class scdn { public static void main(String[] args) { // TODO Auto-generated method stub employee tom=new employee(); tom.setId(10); employee jarry=new employee(); jarry.setId(20); swap(tom, jarry); System.out.println(tom.getId()+'-------'+jarry.getId()); } public static void swap(employee a,employee b) { int temp; temp=a.getId(); a.setId(b.getId()); b.setId(temp); } } class employee{ private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } }

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

结果为:

执行swap之前:

执行swap之后:

为什么类类型通过这两个不同swap方法之后结果会不同呢?这是因为第二个swap中实参tom和形参a一直指向的是同一个地址(x),jarry和b一直指向(y),所以最后修改形参可以改变实参的值。

(0)

相关推荐

  • 吊打面试官系列:说说hashCode和equals方法

    首先我们需要知道hashCode方法和equals方法都是属于Object类的方法.既然属于Object中public修饰的方法,那言外之就是所有对象默认都有这两个方法,只是有时候有的对象已对这两个方 ...

  • java设计模式--迪米特法则

    基本介绍 1.一个对象应该对其他对象保持最少的了解 2.类与类关系越密切,耦合度越大 3.迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好.也就是说,对于被依赖的类不管多么复杂,都尽量 ...

  • 从零开始学Java(九)详解Java中的方法

    方法 1.什么是方法,有什么用? (可以先看一下一个程序如果没有方法,会出现什么问题?) 方法(英语单词:method)是可以完成某个特定功能的并且可以被重复利用的代码片段. 方法的出现,让代码具有了 ...

  • Java 基础之方法中的参数

    文章结构 一.概述 二.Java 的数据类型 2.1 数组作为参数 2.2 类或接口作为参数 2.3 String 作为参数 1. 基本数据类型作为参数 2. 引用数据类型作为参数 三.总结 本篇文章 ...

  • Java中String类的concat方法

    在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变  这两点从源码中对String的声明可以体现: private final char[] value ; ...

  • Java中方法的重载详解(含系统配套视频)

    一.方法的概念 在之前我们学习了方法的定义,方法实现指定功能的代码块的组合,基本的定义 如下: 访问修饰符[static] 返回值类型[如果不需要返回值使用void]方法名(参数类型 参数名,参数类型 ...

  • Java 8 中的方法引用,轻松减少代码量,提升可读性!

    Java 8 中的方法引用,轻松减少代码量,提升可读性!

  • Java教程- Java中hashCode与equals方法

    如何在父类中为子类自动完成hashCode和equals实现,这么做有什么优劣?说一下Object类中hashCode与equals方法的理解,在什么场景下需要实现这两个方法? 有没有可能两个不相等的 ...

  • JAVA中循环删除list中元素的方法总结

    https://www.cnblogs.com/PengChengLi/p/10789066.html 印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后 ...

  • PCL中分割方法的介绍(3)

    上两篇介绍了关于欧几里德分割,条件分割,最小分割法等等还有之前就有用RANSAC法的分割方法,这一篇是关于区域生成的分割法, 区 域生长的基本 思想是: 将具有相似性的像素集合起来构成区域.首先对每个 ...

  • PCL中分割方法的介绍(2)

    关于上一篇博文中提到的欧几里德分割法称之为标准的距离分离,当然接下来介绍其他的与之相关的延伸出来的聚类的方法,我称之为条件欧几里德聚类法,(是我的个人理解),这个条件的设置是可以由我们自定义的,因为除 ...