后端---java和js中函数使用值传递和引用传递问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了后端---java和js中函数使用值传递和引用传递问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2245字,纯文字阅读大概需要4分钟。
内容图文
![后端---java和js中函数使用值传递和引用传递问题](/upload/InfoBanner/zyjiaocheng/855/abceea1e504b46b387ee861336d44c9a.jpg)
java和js函数(方法)中的值传递和引用传递问题
在讨论这个问题之前我想许多同我一样对java或者js中函数传递方式的问题的程序员们,应该大多数都是之前先学习的c或c++再进入学习java或者js的.首先要给大家明确的是java和js之中没有引用传递只有值传递,应该摒弃之前在c或c++中学习的函数传参方式,但也不能完全摒弃掉,因为java和js简单的基本类型的值传递方式也同c或c++相同.
在下面我们主要讲到java的参数传递方式,js完全和javaxiang相同
很多人存在的错解:
Java中的基本类型是指byte/short/int/long/float/double/char/boolean八个类型,这八大类型由于都是不可变的,所以在作为参数传递时,即使在方法内部被修改了值,该参数的原值也是不变的(因为对这八个类型的修改会重新生成一个新的对象),由于这一特性所以被叫做值传递。
引用传递是针对一个Object对象(数组,类,接口,String)作为形参传递,在传递时将对象的引用地址作为参数传递给方法,在方法内部就可以通过该引用地址(实参)访问对象,然后修改对象内容,但是如果将改地址重新指向另一个对象,这时外面的对象并未受到影响。
Java中的数据类型分为引用数据类型和基本数据类型:
基本类型就是我们熟知的八大类型,而引用类型包括数组,类,接口,String.
函数中的形参就可以是这两种基本数据类型(当然还可以是复杂的数据结构类型),一是基本数据类型,二是引用数据类型。形参是基本数据类型是值传递,这无可争议,但很多人在实践中发现但形参是对象(数组,类,接口,String)的传递时,如果在函数中改变这几种类型的对象时,函数外的这个对象的值也会发生相应改变(String类型特殊,后面会单独解释),这个跟c/c++的引用传递很相似,大家就把这种方式误以为为按引用传递.实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是这种传递方式还是叫做按值传递.
我们接下来用实例来举例说明java的参数传递方式:
public class Demo1 {
public static void Afun(int a){
a=100;
}
public static void fun1(Demo1 b){
b.sun=110;
}
int sun=11;
public static void main(String[] args) {
int demo=10;
Demo1 abc=new Demo1();
Afun(demo);
fun1(abc);
System.out.println(demo); //输出10
System.out.println(abc.sun); //输出110
}
}
由上面实例我们可以清楚看到在最后输出时demo输出的仍是10,并没有被调用的Afun函数改变成100,但是由demo1类中实例的对象abc中的sun值由11改变成110.在这时大家很好奇不是java中只有值传递的嘛,怎么这里abc.sun的值发生改变了,这里我们就要提到刚才上面所说的在调用fun1(abc);这个函数的时候我们将abc对象拷贝了一份,传递了它的地址值,通过指向的地址值找到abc.sun改变它的值.
内容总结
以上是互联网集市为您收集整理的后端---java和js中函数使用值传递和引用传递问题全部内容,希望文章能够帮你解决后端---java和js中函数使用值传递和引用传递问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。