传值传引用

Posted runzhizhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传值传引用相关的知识,希望对你有一定的参考价值。

【传值传引用】

【1.栈&堆】

 < 栈>

(1)Java的堆是一个运行时数据区,类的对象从堆中分配空间,这些对象通过new等指令建立。

(2)堆内存空间是在运行时动态分配的。但由于需要在运行时动态分配内存,所以存取速度较慢。

  <堆>

(1)栈中主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用。

(2)栈的存取速度比堆快,栈数据可以共享。但存放在栈中的数据占用多少内存空间需要在编译时确定下来,缺乏灵活性。

【2.引用类型&基本类型】

  <引用类型>

  类名 对象名 = new 类名();

( 类名 对象名;                     //  新建对象名,存在栈中

    对象名 =  new 类名();)              //  用new 在堆中为对象分配存储空间,并将地址赋给对象

  对象名.属性         //  利用地址调用对象存储空间内的属性

  <基本类型>

  int , long , short , float , double , char , boolean , byte     // 栈中

【程序】

public class student {
    
    String name;
    
    public void changename(student st){
        st.name = "张三";
    }
    
    public void changeage(int a){
        a = 20;
    }

    public static void main(String[] args){
        student stu = new student();
        stu.name = "李四";
        System.out.println(stu.name);
        stu.changename(stu);  //在栈中新建一个对象名st,并将stu的地址赋给st,st通过地址访问修改stu空间内属性
        System.out.println(stu.name);    // stu空间内属性被修改
        int age = 10;  // age = 10存储在栈中
        System.out.println(age);
        stu.changeage(age);  // 在栈中新建a,并将age值传递给a,a的值被修改,age的值未变
        System.out.println(age);        
        
    }

}

【输出结果】

技术图片

 

以上是关于传值传引用的主要内容,如果未能解决你的问题,请参考以下文章

理解C++传值传址引用调用

php函数值传值/地址以及引用的用法

C语言中的值传参和引用传参是指啥?

C# 页面之间传值传参的6种方法

传值传址 结构体

intent传值传对象跳转