首页 > 编程语言 > 详细

Java引用类型与值类型——Java面向对象基础(7)

时间:2020-03-11 21:44:46      阅读:65      评论:0      收藏:0      [点我收藏+]

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

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

public class Score {
    int xx;
    int yy;
}
 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中存储的地址值并没有交换,并且正真的数据值也没有交换,所以一切都没有改变。

技术分享图片

  注意:Java中所有的都是值传递

 

Java引用类型与值类型——Java面向对象基础(7)

原文:https://www.cnblogs.com/Unlimited-Rain/p/12465357.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!