java中参数的传递好混乱_Java中参数传递问题

接触java有一段时间了,但是一直对于Java的参数传递很困惑,今天整理一下:

java中参数传递分为两种:值传递、引用传递(又称为地址传递)

JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递

值传递:比较好理解,就是传递的是参数的值的拷贝。所以在函数内部无论怎么操作,外部的变量都不会改变。

public class test{

public void add(int i){

i=10;

}

@Test

public void test(){

int a=5;

add(a);

System.out.println(a);

}

}

输出结果:5

引用传递:传递的是对象的地址拷贝,就像钥匙一样,新配的一样可以开原来的门。

public class test{

public void addD(StringBuilder sb){

sb.append("d");

}

@Test

public void test(){

StringBuilder sb=new StringBuilder("abc");

addD(sb);

System.out.println(sb);

}

}

上面的例子,因为传入的是引用的拷贝,所以值会改变。

在了解这个知识点的基础上,有两个需要注意的地方:

(1)Integer对象,为引用传递,但是值不会改变。具体可以参考:Integer参数传递问题

(2)String对象:可以参考:Java 基本数据类型 及 == 与 equals 方法的区别(关于String的讲解摘抄如下)

String str1 = "abcd"的实现过程:首先栈区创建str引用,然后在String池(独立于栈和堆而存在,存储不可变量)中寻找其指向的内容为"abcd"的对象,如果String池中没有,则创建一个,然后str指向String池中的对象,如果有,则直接将str1指向"abcd"";如果后来又定义了字符串变量 str2 = "abcd",则直接将str2引用指向String池中已经存在的“abcd”,不再重新创建对象;当str1进行了赋值(str1=“abc”),则str1将不再指向"abcd",而是重新指String池中的"abc",此时如果定义String str3 = "abc",进行str1 == str3操作,返回值为true,因为他们的值一样,地址一样,但是如果内容为"abc"的str1进行了字符串的+连接str1 = str1+"d";此时str1指向的是在堆中新建的内容为"abcd"的对象,即此时进行str1==str2,返回值false,因为地址不一样。

String str3 = new String("abcd")的实现过程:直接在堆中创建对象。如果后来又有String str4 = new String("abcd"),str4不会指向之前的对象,而是重新创建一个对象并指向它,所以如果此时进行str3==str4返回值是false,因为两个对象的地址不一样,如果是str3.equals(str4),返回true,因为内容相同。

标签:abcd,问题,Java,String,指向,str1,参数传递,传递,public

来源: https://blog.csdn.net/SICAUliuy/article/details/88555569

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值