关于Java中引用变量和值变量

一、引用变量和值变量的区别

  1.值类型的的数据都是存储在中。

  2.引用类型,其变量的数据(其数据是一个地址值)存储在中,引用类型的正真数据储存在中。

  3.八大基本数据类型-值类型,存放到中。其他的数据类型(String、数组、对象……)-引用类型,存放到中。

二、值类型和引用类型在方法的调用中

  1.如果用值类型作为方法的实际参数传递,方法中将参数交换,并不影响本身的参数的改变。

 1 public class Example01 {
 2 
 3     public static void main(String[] args) {
 4         int x=10;
 5         int y=20;
 6         System.out.println("x:"+x+" y:"+y);
 7         exchange(x,y);
 8         System.out.println("x:"+x+" y:"+y);
 9 
10     }
11     public static void exchange(int x,int y){
12         int tmp=x;
13         x=y;
14         y=tmp;
15         System.out.println("x:"+x+" y:"+y);
16     }
17 }

   结果:

     2.用引用类型作为实际参数传递,传递参数的本质还是传值,只是这个值是内存地址的引用而已。会影响本身参数改变。

 1 public class Example01 {
 2 
 3     public static void main(String[] args) {
 4         
 5         Score score=new Score();
 6         score.xx=10;
 7         score.yy=20;
 8         System.out.println("xx:"+score.xx+" yy:"+score.yy);
 9         exchange(score);
10         System.out.println("xx:"+score.xx+" yy:"+score.yy);
11     }
12     public static void exchange(Score score){
13         int tmp=score.xx;
14         score.xx=score.yy;
15         score.yy=tmp;
16         System.out.println("xx:"+score.xx+" yy:"+score.yy);
17     }
18 }

  结果:

图片解析:

 

     3.典型思想错误示范

 1 public class Example01 {
 2 
 3     public static void main(String[] args) {
 4         
 5         String x="I love you";
 6         String y="I hate you";
 7         System.out.println("x:"+x+"     y:"+y);
 8         exchange(x, y);
 9         System.out.println("x:"+x+"     y:"+y);
10         
11     }
12     public static void exchange(String x,String y){
13         String tmp=x;
14         x=y;
15         y=tmp;
16         System.out.println("x:"+x+"     y:"+y);
17     }
18 }

   结果:

   疑惑:为什么这里的明明是引用类型,但是却依然没有影响到主函数中的实参的值的改变呢?

   解析:因为这里混淆了概念,实际上Java中所有的都是值传递,本代码中x,y中存储了地址值,在交换函数exchange()中,形参x,y交换了值,也就是交换了地址值。但是并没有交换真正的数据。

  当函数执行完成,回到主函数中时,形参失效,而x,y中存储的地址值并没有交换,并且正真的数据值也没有交换,所以一切都没有改变。

猜你喜欢

转载自www.cnblogs.com/Unlimited-Rain/p/12458931.html