YeBin`s Blog

vuePress-theme-reco YeBin    2017 - 2020
YeBin`s Blog YeBin`s Blog

Choose mode

  • dark
  • auto
  • light
首页
分类
  • java
标签
时间线
联系我
  • GitHub
author-avatar

YeBin

5

Article

2

Tag

首页
分类
  • java
标签
时间线
联系我
  • GitHub
  • java 数值交换

java 数值交换

vuePress-theme-reco YeBin    2017 - 2020

java 数值交换


YeBin 2017-12-15 tag1

# java 两个数值交换

​ 在写这篇文章之前,我一直以为java进行数值交换与c是一样的,传递引用类型即可,但其实在java中无论是值传递还是引用传递都只是将实参拷贝一份,在方法里修改的实际是实参的副本。下面我们来举个例子:

 public  static  void swap(int a,int b)
     {
          int temp=a;
          a=b;
          b=a;
     }

public  static  void  main(String [] args){
         int a=1;
         int b=2;
         swap(a,b);
         System.out.println("a="+a); //a=1
         System.out.println("b="+b);//b=2
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14

这段代码相信很多人都明白,基本类型是值传递,形参的值的改变不会影响实参.那么很多人就会立刻想到传递引用类型Integer,但传递Integer真的能做到吗?

public  static  void swap(Integer a,Integer b)
 {
      int temp=a;
      a=b;
      b=a;
 }

public  static  void  main(String [] args){
     Integer a=1;
     Integer b=2;
     swap(a,b);
     System.out.println("a="+a);//a=1
     System.out.println("b="+b);//b=2
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

这里就有人很奇怪,为什么这样还是没有把两个值交换呢?其实我刚才说过,java里的传参是根据实参拷贝过来的,也就是说形参是实参的一个副本,swap方法里只对a,b的副本做了交换,而a,b没有改变,故两者的值没有交换