搜索
当前位置: sk彩票 > 对象型方法 >

java 在方法中改变int类型的值

gecimao 发表于 2019-07-19 22:09 | 查看: | 回复:

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  a=1; //因为在构造方法中没有形式参数也没有局部变量,所以这个a是指成员变量,也就是上面定义的a

  a=3;//如果你用这种方法,那改变的事上面的形参的值,而不是成员变量a的值

  因为int类型是一个基本数据类型,传递进去的是一个实际的变量而不是一个对象引用

  1. 对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。

  2. 对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持

  4. 方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。

  上面总结出来的不过是我们所看到的表面现象。那么,为什么会出现这样的现象呢?这就要

  当基本类型的变量被当作参数传递给方法时,JAVA 虚拟机所做的工作是把这个值拷贝了一

  份,然后把拷贝后的值传递到了方法的内部。因此在上面的例子中,我们回头来看看这个方

  在这个方法被调用时,变量i 和ParamTest 型对象t 的属性num 具有相同的值,却是两个不同

  变量。变量i 是由JAVA 虚拟机创建的作用域在 change(int i)方法内的局部变量,在这个方法

  执行完毕后,它的生命周期就结束了。在JAVA 虚拟机中,它们是以类似如下的方式存储的:

  很明显,在基本类型被作为参数传递给方式时,是值传递,在整个过程中根本没有牵扯到引

  用这个概念。这也是大家所公认的。对于布尔型变量当然也是如此,请看下面的例子:

  那么当引用型变量被当作参数传递给方法时JAVA 虚拟机又是怎样处理的呢?同样,它会拷

  贝一份这个变量所持有的引用,然后把它传递给JAVA 虚拟机为方法创建的局部变量,从而

  这两个变量指向了同一个对象。在篇首所举的示例中,ParamTest 类型变量t 和局部变量pt

  有一种说法是当一个对象或引用类型变量被当作参数传递时,也是值传递,这个值就是对象

  的引用,因此JAVA 中只有值传递,没有引用传递。还有一种说法是引用可以看作是对象的

  别名,当对象被当作参数传递给方法时,传递的是对象的引用,因此是引用传递。这两种观

  点各有支持者,但是前一种观点被绝大多数人所接受,其中有 《Core Java》一 的作者,以

  我个人认为值传递中的值指的是基本类型的数值,即使对于布尔型,虽然它的表现形式为

  true 和false,但是在栈中,它仍然是以数值形式保存的,即0 表示false,其它数值表示

  true 。而引用是我们用来操作对象的工具,它包含了对象在堆中保存地址的信息。即使在被

  作为参数传递给方法时,实际上传递的是它的拷贝,但那仍是引用。因此,用引用传递来区

  1. 基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法

  2. 对象和引用型变量被当作参数传递给方法时,在方法实体中,无法给原变量重新赋值,

  但是可以改变它所指向对象的属性。至于到底它是值传递还是引用传递,这并不重要,重要

  的是我们要清楚当一个引用被作为参数传递给一个方法时,在这个方法体内会发生什么。

  // 在java里,基本数据类型的传递都是传值,事实上你在调用A的构造函数时,就已经修改了a的值。这样的问题,你到csdn上问,回答的人会比较多一点。 这个跟传对象不一样,很多初学者都弄不明白它们的区别。

本文链接:http://moodyjews.net/duixiangxingfangfa/897.html
随机为您推荐歌词
推荐文章

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部