java基础知识:java方法传参机制
来源:互联网 发布:淘宝上网 编辑:程序博客网 时间:2024/05/21 18:38
转自 http://blog.sina.com.cn/s/blog_693e5f3701019t82.html ;
这个问题是面试的时候经常会问到的一道题吧?这次做项目的过程中,其中一个同学因为无用了,导致了一个bug,不过是在提测前啦!本来我想借着这次机会分享一下java方法传参的机制,但是经过几天的学习,了解,发现网上的博客基本上没有一篇能让人看后就清清楚楚的明白的,讲的都很囫囵吞枣。觉得要要真正把这个问题说明白还真的不是一件容易的事?要了解jvm的堆栈和堆,以及java中的引用和赋值的含义。我现在也不能清楚的讲明白,但现在应该不会误用了,就是方法调用,知道怎样做可以改变传递参数的值,怎样做是不会改变传递参数的值。下面来个小测试程序,你知道这个程序会答应出什么吗?
public class Test {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
int i = 5;
operate(a, b, i);
System.out.println(a + "," + b + "," + i);
}
public static void operate(StringBuffer x, StringBuffer y, int j) {
x.append(y);
y = x;
y.append("C");
j = 1;
}
}
规律总结:
Java参数,不管是原始类型还是引用类型,传递的都是副本(java传参是传引用还是传值,网上争论很多)
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值.
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是通过地址改变改变了地址指向的值,那么在函数内的改变会影响到传入的参数。
如果在函数中改变了副本的地址,如当执行如a=其他对象,a=new等赋值操作时,实际上是将a指向新的位置,那么函数外的原值不改变。
记住上面的这段话,至少不会在方法调用的过程中,没有拿到自己想要的结果(尽管方法里明明做了自己想要做的事了)。
我不理解的就是jvm是如何通过堆栈传递副本的。虽然通过程序运行时这样的。如果哪位大牛对jvm的堆栈和堆的原理非常清楚,麻烦为大家分享一下java方法传参的机制吧!
0 0
- java基础知识:java方法传参机制
- java基础知识-反射机制
- Java基础知识回顾--反射机制
- java方法(基础知识)
- Java基础知识之方法
- java基础知识—Java中的反射机制
- java基础知识之-本地方法
- java基础知识-方法与数组
- java基础知识--循环,数组,方法
- Java序列化机制(1)- 基础知识
- java 多线程基础知识2---同步机制
- Java基础知识虚拟机类加载机制
- JAVA异常处理机制(基础知识)
- Java基础知识—虚拟机类加载机制
- Java基础知识—垃圾回收机制
- java基础知识(二)--反射机制
- Java基础知识之异常处理机制
- Java基础知识——反射机制
- 内网渗透几个小工具-T00ls20150804
- HDU 3360 National Treasures 黑白染色+最小点覆盖 ACM Steps 6.3.8
- 高完整性代理(IE安全模式)
- 深入解析String#intern
- 关于storyboard和xib的小Tips
- java基础知识:java方法传参机制
- KMP简单应用
- 虚方法 oc
- 见证奇迹的时刻 70平老房重新焕发魅力
- uva 108 Maximum Sum 最大子矩阵和
- 102Binary Tree Level Order Traversal (java)
- light oj 1013 LCS 应用
- 类成员函数指针
- 网上处方药物手册Rxlist 及其药学信息资源