java中的参数传递问题
来源:互联网 发布:aⅴ淘宝m7视频 编辑:程序博客网 时间:2024/05/18 16:14
有一个问题困扰我很久,java中的参数究竟是怎么传递,很多人说java中只有值传递,但我遇到一个问题值传递是无法解释:问题的代码如下,接下来在分析。
- public class StrBTest {
- private final StringBuffer info;
- public StrBTest(String name ,String address){
- this.info = new StringBuffer("name:"+name+",address:"+address);
- }
- public StringBuffer getInfo(){
- return info;
- }
- public String toString(){
- return info.toString();
- }
- }
- public class StrBMain {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- StrBTest userInfo = new StrBTest("Alex","Alaska");
- StringBuffer strB = userInfo.getInfo();
- System.out.println(userInfo);
- strB.replace(5, 9, "Bob");
- System.out.println(userInfo);
- }
- }
输出结果是:
name:Alex,address:Alaska
name:Bob,address:Alaska
很显然的,在这个过程中,在StrBMain中获取了StingBuffer对象userInfo.info的引用并赋值给了strB,并且改变了它的值,
如果是值传递,那么userInfo中info属性的值就不会发生变化,但是很显然和我们的想法不一样,userInfo中info的值发生了变化,也就说userInfo遭到了破坏,这也就不符合 immutable pattern了。所以我的结论是:
1.java的传递基本类型(如int,long等)的时候是值传递的。
2.java传递一般类(Object的子类)时候是引用传递。
进一步分析:
- public class Person {
- private String name;
- private int num;
- public Person(String name, int num) {
- this.name = name;
- this.num = num;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- public void setNum(int num) {
- this.num = num;
- }
- public int getNum() {
- return num;
- }
- public String toString(){
- return "name :"+name+" , number :"+num;
- }
- }
- public class StrBMain {
- public static void main(String[] args) {
- Person person = new Person("Dalton",8394);
- System.out.println(person);
- change(person);
- System.out.println(person);
- }
- private static void change(Person person){
- person.setName("Bobby");
- }
- }
结果是:name :Dalton , number :8394
name :Bobby , number :8394
程序工作过程:main方法中先实例化了一个Person类,并在控制台输出。
接下来,person传递给change()方法,在change()方法中改变了Person的name属性,这个改变也反映到了person实例中,把person的name属性改变成“Bobby”。这个过程明显是引用传递。
而且很明显的,在递归处理时很需要,参数的引用传递的。
以上仅代表个人观点,有错望指出。
- java中的参数传递问题
- java中的参数传递问题
- Java中的参数传递问题
- Java中的参数传递问题
- Java中的参数传递问题
- Java中的参数传递问题
- java中的参数传递问题
- Java中的参数传递问题
- Java中的参数传递问题
- java中的参数传递问题
- 参数传递中的编码问题(Java)
- Java中的参数传递问题图解
- Java中的参数传递问题和图解
- 009、Java中的参数传递问题
- 关于Java中的参数传递问题
- java中的参数传递
- java中的参数传递
- Java中的参数传递
- 求伯君:从未放弃与微软竞争 金山在WPS在
- 经常和MV刷新打交道。用一个脚本监控刷新进度。
- 中暑
- 35厘米小天线节目40余套
- 134度138度二合一天线55厘米节目100套东南向
- java中的参数传递问题
- .Net部署二三事之二
- 学习.NET (8) 实现派生类中Deep Copy的几种常用方法(通过ICloneable接口)
- 儿子上先,怎一个帅字了得。
- left join使用精华
- UML类图详解
- 两阶段提交协议
- 我所知道的傅平山参谋之死
- 几个驱动重要的结构