java定义函数并调用 为什么说java里面只有值传递?
为什么说java里面只有值传递?
关于这个问题,不同人对它的理解不尽相同。对初学Java的同学来说,可能简单的认为Java中参数传递就是分为值传递和引用传递,至于为什么,因为课本上就是这么说的。对于有些工作年限的程序员来说,可能认为如果传递的参数类型是普通类型,那么就是值传递,如果参数是对象,那么就是引用传递。还有一些人认为Java中只有值传递,就是题主问题中的主题。
对Java编程语言来说,前两种理解是错误的,Java中只有值传递。对于我来说,刚开始也是理解有值传递和引用传递一说的,但是随着自己写代码的积累,慢慢发现并不是那么回事。那为什么只有值传递呢?
首先,来了解一下什么是值传递,什么是引用传递?
值传递是说在调用函数时,将实际参数值复制一份传递到被调用函数中,在被调函数中修改参数值不会影响原实参值。
引用传递是说在调用函数时,将实际参数的地址直接传递到被调用的函数中,在被调函数中修改参数值会影响原实参值。
如果传递的参数类型是普通基本类型,那么一定是复制一份实参值传递给形参的,但是当参数类型是对象的时候,也是复制的一份参数值传递给形参,只不过复制的是对象引用的地址,也就是在内存中分配的存储地址,不是直接传递的引用地址。
此时,可能有人会说那为什么将一个对象传到另一个方法中,在这个方法中修改了这个对象的属性值时,原调用方法中的对象属性值也跟着变了,它不就是引用传递吗?
其实,这是一个很容易迷惑的点。你仔细看看上面的陈述就会发现,不是这么回事。将一个对象传到另一个方法中,传递的是什么?传递的是对象引用的地址,这个对象引用的地址在另一个方法中被修改了吗?原对象引用有受影响吗?并没有吧!
所以,Java中并没有引用传递,只有值传递,不要再搞错了!
我是『Java实战技术』,关注我获取更多原理分析、实战技术!
Java的哪个语法特性让你觉得写Java代码很享受?
本人在日常主要使用的语言为c#和Java,就语法而言,写c#更让人享受。主要原因为c#更多的语法糖,linq真的好用,其次visual studio号称宇宙第一IDE。但是个人还是更愿意用java。
从java8出来后,感觉java在追赶着c#的步伐, java和c#的语法上越来越像(本来也挺像的,哈哈)。以下做一个小小的比较。
c#
java
以上实现的功能差不多,在java8中加入lambda表达式后,个人感觉越来越像c#了。
抛开语法层面,现在来说一说为什么更愿意用java
1、首先当然是看收益啦,在国内基本上没有用c#的大厂,本来携程在用,后来也转为java了。
2、从技术层面来讲,因为java造轮子的多,有很多优秀的框架可以使用。在实际做项目中你遇到的问题,其他人肯定遇到过,能够很好的找到问题关键。
3、从生态上来讲,Java无疑是最好的选择之一,因为其开源的早,建立生态的时间早。
4、从性能来说,Sun/Oracle的HotSpot JVM内置的JIT编译器在运行时对字节码已经做出了非常大的优化努力,如果不是对性能十分敏感的应用,java足够用了。
谢谢。
java定义函数并调用 java函数怎么调用数组 java数组作为参数传入函数
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。