千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  你对值传递和引用传递的理解是什么?

你对值传递和引用传递的理解是什么?

来源:千锋教育
发布人:lxl
时间: 2023-03-21 10:47:40

  今天,通过学员的面试情况,总结了一道非常高频的面试题分享给大家。这就是值传递和引用传递的理解。为什么单拿这道题来讲解呢?因为班里的学员不止一个人被问到了这个问题(历届学员也经常被问到这个问题),所以你是不是要拍拍大腿认真看了?

  好了,重点来了。

  所谓传递,在java中其实就是将实际参数赋值给形式参数。那么什么是值传递,什么又是引用传递呢?现在文哥先给你说说值传递。

  值传递:方法在调用的时候,实际参数把它的值赋予给形式参数,但是形式参数的数据类型只能是基本数据类型和String。形式参数和实际参数在内存上是两个独立的变量,对形式参数的修改并不会影响实际参数的值(敲黑板,这点很重要)。概念搞清楚之后,我们一起来看下面的代码:

值传递和引用传递

  请问结果是多少?

  很多同学可能不假思索的回答:100!因为passingParameter方法的内部对b值重新赋予了。事实上并不是你们想的那样。下面我们结合我们的定义和代码来画一张图:

值传递和引用传递

  我们现在解读一下这幅图的意思:

  我们先看main方法,main方法里面将实际参数b传递给passingParameter方法的形式参数a,由于形式参数a是int类型,所以可以判定这是值传递。根据我们上面给值传递的定义,passingParameter(b);

  这句代码里面的b的值只是int b = 10的复制品(或者说是化身)。所以不管passingParameter方法内部如何对这个复制品进行操作,永远也无法修改b本身的值。所以main方法里面的输出语句输出的是b值本身,也就是10。这么说大家听懂了不咯?

  下面我们再看看看引用传递。

  引用传递:指的是在方法调用时,传递的实际参数是java对象,也就是对象的内存空间的地址。而形式参数也会指向这一内存地址。注意被传递的形式参数的数据类型必须是引用数据类型(又敲黑板了,这点很重要)。概念理解清楚之后,我们再来看一段代码:

值传递和引用传递

  请问main方法执行之后输出的结果是多少?说18就对了。为了便于大家理解,我再画一幅图:

值传递和引用传递

  现在我们来解读一下这幅图的意思:

  我们先看main方法,main方法中给passingParameter方法传递了一个student对象,由于passingParameter的形式参数是Java对象,故这种传递称之为引用传递。根据代码,main方法中new的student的对象是在堆内存中开辟空间并创建的,所以student这个变量指向了这个对象。根据引用传递的概念,传递的是对象的内存地址。由此可得passingParameter的形式参数student也指向了这个对象的内存地址,所以在passingParameter方法内部对age属性进行修改,是对实际参数和形式参数共同指向的那个对象进行修改。所以main方法中最后输出的值是对象修改之后的属性值。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>