美文网首页
值传递与引用传递

值传递与引用传递

作者: BlackNeko | 来源:发表于2016-11-03 13:43 被阅读22次

一般数据类型(byte,char,int,float,double,long,String,Integer,Long,Float,Double)是值传递,也可以称为拷贝传递,即拷贝实参的值然后初始化形参;其他的(Object)是引用传递,即传递地址,引用传递形参可以修改实参实例成员的值,但不能借助重新给形参赋值而间接地让实参指向一个新的堆地址。

private void f3(StringBuilder s) {
    s.append(",haha");
    s = new StringBuilder("hello,bitch");
}

StringBuilder stringBuilder = new StringBuilder("yui");
f3(stringBuilder);
System.out.println(stringBuilder);

output:

yui,haha

可以用 帧栈 或者 全局变量和局部变量 来解释:

f3()的方法形参为 StringBuilder s ,可以理解为在f3()函数的内部声明一个 StringBuilder s 变量,当执行 f3(stringBuilder) 调用操作时,实际上是用实参 StringBuilder stringBuilder 指向的堆 new StringBuilder("yui")地址 来初始化 s,但是,在栈上看来,stringBuidlers 是两个不同的地址,在执行 s.append(",haha"); 时,stringBuidlers指向的是堆上的同一个地址,所以 s 可以修改 new StringBuilder("yui") 实例的值。执行 s = new StringBuilder("hello,bitch") 赋值语句时,只是把方法内部声明的 StringBuilder s 变量指向新的堆地址 StringBuilder("hello,bitch"),但栈上的 stringBuilder 仍然指向 new StringBuilder("yui")

引用传递只是传递 实参指向的堆地址 而不是传递 实参栈上地址的引用

相关文章

  • 聊聊Java内部类

    一.磨叽磨叽Java值传递与引用传递 “在Java里面参数传递都是按值传递”即:按值传递是传递的值的拷贝,按引用传...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • Java 与值传递

    问: 什么是值传递?什么是引用传递?为什么说 Java 中只有值传递? 一、值传递与引用传递 实参与形参: 实际参...

  • Day12-Java

    值传递和引用传递 值传递是值的拷贝, 引用传递是引用的拷贝 String 类型是引用类型, new String ...

  • 引用传递与值传递

    访问变量分引用传递和值传递 值传递 基本数据类型值的传递,就是将变量的值复制给另一个变量。这两个变量是完全独立的。...

  • 值传递与引用传递

    一般数据类型(byte,char,int,float,double,long,String,Integer,Lon...

  • 值传递与引用传递

    JavaScript有6种基本的数据类型,分别是:布尔、null、undefined、String和Number、...

  • 值传递与引用传递

    值传递 在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传...

  • Java中的参数传递

    为了便于理解,会将参数传递分为按值传递和按引用传递。按值传递是传递的值的拷贝,按引用传递传递的是引用的地址值,所以...

  • Java所有参数-对象引用及基本类型值--都是值传递

    前言 当前主要存在两种传递方式,值传递和引用传递,先简单介绍值传递和引用传递值传递(pass by value)是...

网友评论

      本文标题:值传递与引用传递

      本文链接:https://www.haomeiwen.com/subject/gcnbuttx.html