String 值传递or引用传递

其实,要是在之前,我会很肯定的回答String是引用传递,但是今晚一个例子,也可以说是自己忘了一些String的知识点,如需复习一下String的可以,看一下我之前的一篇博客用好字符串,提防陷阱


好吧,我简单列一下我遇到的情况

public class Test
{
	public static void main(String[] args) throws IOException
	{
		String str = "string";

		append(str);
		System.out.println("main方法:" +str);

	}

	public static void append(String str)
	{
		str += " change";
		System.out.println("append方法:" + str);
	}
}

结果:


这时我就开始怀疑是不是String其实是值传递呢?


仔细一想,其实String是不可变长的,也就是String改变了,那jvm其实就在缓冲池长生了新的String直接量,并把String指向他,所以上面代码中执行的结果就是main中的str指向原来的String直接量,而 append方法中的str指向新的String直接量


要实现上面的效果可以用可以变长的StringBuilder,他整个过程中不会长生新的对象

public class Test
{
	public static void main(String[] args) throws IOException
	{
		StringBuilder str = new StringBuilder("string");

		append(str);
		System.out.println("main方法:" + str);

	}

	public static void append(StringBuilder str)
	{
		str.append(" change");
		System.out.println("append方法:" + str);
	}
}

结果:


其实以上这些点,在我之前的博客用好字符串,提防陷阱就有关于String的注意事项,不过确实有时候还是会跌入这些啃爹的陷阱了去




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值