Java——值传递和引用传递

这篇博文是对知乎上的一个朋友的回答重新做了排版,传送门

基本类型和引用类型
  • 区别:
int num = 10;
String str = "hello";

relationshipOne
- 如上图所示,int是基本数据类型,其值是直接保存在变量当中。而String是引用类型,变量str中保存的是对象地址。因此,str一般称为引用变量,引用指向实际对象,而实际对象中保存着值。

赋值运算符(=)的含义
  • code:
num = 20;
str = "java"

relationshipTwo
- 对于基本数据类型int,赋值运算符会直接修改其值,原来的值会被覆盖掉。而对于引用类型String,赋值运算符会改变引用中所保存的地址,原来的地址会被覆盖掉。但是原来的对象不会被改变。任然存在。

基本类型和引用类型作为函数参数
  • 第一个例子:number是基本数据类型,number将保存的值传递给value,value在数值上和number相等,但是value的变化不会影响number,两个变量除了数值相等没有任何联系:
void foo(int value)
{
    value = 100;
}

foo(number);
  • 第二个例子:没有提供改变改变自身值的引用类型,str不会被改变,因为text=“windows”修改的是引用变量text中的值(地址),其修改的并不是值(地址)所指向的值。因此引用变量str所指向的内存中的值并没有变化。
void foo(String next)
{
    text = "windows";
}

foo(str);
  • 第三个例子:提供了改变自身方法的引用类型,StringBuilder对象的append()方法修改的是对象本身,因此变量str的值也发生了改变。
StringBuilder str = new StringBuilder("iphone");
void foo(StringBuilder builder)
{
    builder.append("7");
}
foo(str);

relationshipThree
after append
- 第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。

StringBuilder str = new StringBuilder("iphone");
void foo(StringBuilder builder)
{
    builder = new StringBuilder("ipad");
}
foo(str);

relationshipFour

注意
  • 在java编程中应当修改变量时应当注意修改的是变量的值还是对象中的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值