通过String和StringBuilder理解值传递而非引用传递的模糊概念

本文深入探讨Java中的值传递机制,并通过具体的代码示例说明String和StringBuilder类型在方法调用过程中的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习c,c++特别是经常看过国内c,c++,java书籍的朋友们肯定知道值传递和引用传递的概念,我们必须知道的就是java中只有值传递,引用(指针)也是一种值,值传递就是将值拷贝一份传入方法的对应的形参中:

首先来看这个代码:

package test;

public class Test {


public static String doString(String str)
{
str += "哥" ;
return str ;
}

public static StringBuilder doStringBuilder1(StringBuilder str)
{
str = new StringBuilder() ;
str.append("新犀利哥");
return str ;
}

public static StringBuilder doStringBuilder2(StringBuilder str)
{
str.append("哥") ;
return str ;
}



public static void main(String[] args) {

String str1 = new String("犀利") ;
doString(str1) ;
System.out.println(str1) ;

StringBuilder str2 = new StringBuilder() ;
str2.append("犀利");
doStringBuilder1(str2) ;
System.out.println(str2) ;

StringBuilder str3 = new StringBuilder() ;
str3.append("犀利");
doStringBuilder2(str3) ;
System.out.println(str3) ;




}


}
//输出结果为:
"犀利"
"犀利"
"犀利哥"

[color=red]首先要知道的是JAVA中只有值传递.
注意:经常会听到引用传递的说法,实际上引用传递就是值传递,就是将栈中引用(指针)复制一份传递到方法中[/color]

str1变量:
str1是String类型,采用值传递将String类型的引用复制一份传给doString方法的形参,String是继承final,String类型数据是不可以改变的,因此对String的操作实际上是在指向新建的地址空间。方法中的str1的引用只是一个拷贝,因此方法中的操作不会对原来的str1指向的地址空间进行更改:
//输出 "犀利"


str2变量:
str2变量是StringBuilder类型,采用值传递将StringBuilder类型的引用str2复制一份传给doStringBuilder1方法的形参,方法中新建StringBuilder,即拷贝的引用指向了新建的StringBuilder对象地址,对新地址的操作不会改变外部的引用指向的原地址的数据:
//输出 "犀利"

str3变量:
str3变量是StringBuilder类型,采用值传递将StringBuilder类型的引用str2复制一份传给doStringBuilder1方法的形参,方法中对StringBuilder对象进行操作,因为原引用和拷贝的引用都指向同一个StringBuilder对象地址,通过拷贝的引用对地址进行操作意味着改变了原引用所指向的地址的数据:
//输出 "犀利哥"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值