java方法是传值还是传引用问题
来源:互联网 发布:深圳美工师到哪考 编辑:程序博客网 时间:2024/06/15 15:55
先下结论:传入基本类型是传值,传入对象是传引用
网上看到有人说java是传值,论据如下
在java中只有一种传递方式,那就是值传递.可能比较让人迷惑的就是java中的对象传递时,对形参的改变依然会影响到该对象的内容。
下面这个例子来说明java中是值传递.
public class Test { public static void main(String[] args) { StringBuffer sb = new StringBuffer("hello "); getString(sb); System.out.println(sb); } public static void getString(StringBuffer s) { //s = new StringBuffer("ha"); s.append("world"); } }
在上面这个例子中,当前输出结果为:hello world。这并没有什么问题,可能就是大家平常所理解的引用传递,那么当然会改变StringBuffer的内容。但是如果把上面的注释去掉,那么就会输出:hello.此时sb的值并没有变成ha hello. 假如说是引用传递的话,那么形参的s也就是sb的地址,此时在方法里new StringBuffer(),并将该对象赋给s,也就是说s现在指向了这个新创建的对象.按照引用传递的说法,此时对s的改变就是对sb的操作,也就是说sb应该也指向新创建的对象,那么输出的结果应该为ha world.但实际上输出的仅是hello.这说明sb指向的还是原来的对象,而形参s指向的才是创建的对象,这也就验证了java中的对象传递也是值传递。
首先纠正几点
1. 形参s是对变量sb的复制,修改s不会对sb有影响,只是s和sb都指向同一个对象1(地址:0x00000001,值为hello),所以修改s也会修改sb所指向的对象。
2. 进行s = new StringBuffer(“ha”);操作后,为什么sb依旧为hello,而不是ha world,那是因为赋值操作,使变量s所指向一个新的对象2(地址:0x00000002,值为ha),而sb还是指向对象1,所以后面s.append(“world”)操作是修改对象2的内容,对象1不变。最后打印对象1,当然结果是hello。
- java方法是传值还是传引用问题
- Java方法是传值还是传引用?
- Java是传值还是传引用问题
- java方法传值还是传引用的问题
- java方法调用时,是传值还是传引用?(转)
- Java 是传值还是传引用
- Java是传值还是传引用
- Java 是传值还是传引用
- Java是传值还是传引用
- Java是传值还是传引用
- Java是传值还是传引用
- java是传值还是传引用
- java是传值还是传引用?
- java是传值还是传引用
- Java是传值还是传引用
- java是传值还是传引用
- Java是传值还是传引用
- Java是传值还是传引用
- Android常用控件(ImageView)
- Codeforces 471D MUH and Cube Walls 题解
- 遇见Kotlin
- js 中的this
- Eclipse常用快捷
- java方法是传值还是传引用问题
- ogre 世界坐标、本地坐标、屏幕坐标之间的转换
- HDU1083 Courses(二分图匹配)
- Leetcode110. Balanced Binary Tree
- [vim] 删除
- 类名.class, class.forName(), getClass()区别
- 修改mysql默认字符集为utf
- Hadoop HA 环境搭建
- android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类)