欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 交换两个变量的数值实现方法

程序员文章站 2024-03-12 22:59:03
一、参数传递方法 为解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种: 1.按值传递 2.按引用传递 3.按指针传递 其中按值传递...

一、参数传递方法

为解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:

1.按值传递
2.按引用传递
3.按指针传递

其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值;按引用传递表示方法(函数)接收的调用者提供的变量地址;按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址。

二、java参数传递方法

java提供的参数传递方法,很遗憾只有一种,按值传递。也就是说,方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的参数变量的内容。

java的方法参数类型可以分为两类:

1.基本数据类型
2.对象引用

有过java开发经验的朋友都知道,对于基本数据类型,java方法无法改变变量内容。那对自定义类的对象引用是否也不能修改内容呢?可以通过一个简单的例子说明。代码如下:

pubpc class myclass{
  private object num;

  pubpc myclass(object num){
    this.num=num;
  }
  
  pubpc object getnum() {
    return num;
  }

  pubpc void setnum(object num) {
    this.num = num;
  }
}
pubpc class main {
  
  pubpc static void change(myclass myclass){
    myclass.setnum(100);
  }
  
  
  
  pubpc static void main(string[] args){
    myclass a=new myclass(10);
    system.out.println("调用change方法前的值为:"+a.getnum());
    change(a);
    system.out.println("调用change方法后的值为:"+a.getnum());
  }
  
}

上面代码执行输出结果如下:

Java 交换两个变量的数值实现方法

从结果中可以看出,change方法能够修改对象的状态。也就是说java方法可以改变对象的参数状态。那这是否意味着java方法对于自定义的数据类型(自定义类)的参数采用的是引用传递?为了确认结果可以编写个简单例子,所有的自定义类仍然是上面的myclass。代码如下:

pubpc static void swap(myclass a,myclass b){
    myclass tmp=a;
    a=b;
    b=tmp;
  }
  
  pubpc static void main(string[] args){
    myclass a=new myclass(10);
    myclass b=new myclass(100);
    system.out.println("交换之前a的值为:"+a.getnum());
    system.out.println("交换之前b的值为:"+b.getnum());
    swap(a,b);
    system.out.println("交换之后a的值为:"+a.getnum());
    system.out.println("交换之后b的值为:"+b.getnum());
  }
}

执行结果如下:

Java 交换两个变量的数值实现方法

通过上面结果可以发现,java方法对自定义类的参数传递使用的仍然是值传递,不是引用传递。那为什么java方法能够修改对象状态呢?

可以考虑调用change方法的具体执行过程,从中寻找答案。

调用change方法事,具体的执行过程是:

myclass被初始化成实参a的copy,这是对对象的引用。

setnum方法应用于这个对象的引用。myclass和a同时引用的那个myclass对象的num变为了100。

方法结束后,参数变量myclass不再使用。而a继续引用那个num变为100的myclass对象。如下图所示。

Java 交换两个变量的数值实现方法

所以,java方法能够实现改变对象参数状态的原因是:方法得到的是对象引用的拷贝,对象引用及方法中的其他拷贝同时引用同一个对象。

现在,总结一下java的方法参数使用:

方法不能修改一个基本数据类型的参数;

方法可以改变对象参数的状态;

方法不能让对象参数引用一个新的对象(原因参考调用change方法时的具体执行过程)。

三、交换变量的数值

既然已经知其所以然,那么知其然就不是难事了。直接贴出我的个人代码:

pubpc static void swap(myclass a,myclass b){
    object tmp=a.getnum();
    a.setnum(b.getnum());
    b.setnum(tmp);
}

执行结果如下:

Java 交换两个变量的数值实现方法

交换有效。

参考文献:java核心技术 卷ⅰ。

以上这篇java 交换两个变量的数值实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。