博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java引用数据类型在方法中的值传递
阅读量:5324 次
发布时间:2019-06-14

本文共 997 字,大约阅读时间需要 3 分钟。

package org.jimmy.autosearch20180821.test;public class TestStringArr {    public static void main(String[] args) {        String[] strArr = new String[]{ "1", "2" };        System.out.println(strArr[0]);        test(strArr);        System.out.println(strArr[0]);        test2(strArr);        System.out.println(strArr[0]);        /*        首先引用数据类型的真正的数据是存在堆里面的.        在new的时候,堆里面分配一个地址,并初始化变量和赋值,        之后在栈里面也分配一个地址,此时这个栈的地址指向堆里面.        在程序员交流群和大佬交流了一下,引用数据类型作为实参调用.        此时,方法里面局部变量实际上是重新分配了一个栈,这个栈的地址是实参的栈中地址.(拷贝或者说备份)        在方法里面,重新将局部变量new一次,实际上此时只是又在堆中分配了一个空间,并初始化.        但是实参的值是在堆中的,所以没有改变.        在方法里面,直接修改局部变量的值,外面也修改.(因为虽然局部变量和实参的栈不是同一个        ,但是栈中地址都是相同的,都指向实参的那个堆地址,所以对它进行修改,实参的值也会改变.)        */    }        public static void test(String[] strArr){        strArr[0] = "3";    }        public static void test2(String[] strArr){        strArr = new String[]{};    }    }

直接上代码,代码中有解释,再看不懂就先去看看java虚拟机的书.

这是结果.解释在上面的代码里面.

转载于:https://www.cnblogs.com/JimmySeraph/p/9641582.html

你可能感兴趣的文章
spring+mybatis利用interceptor(plugin)兑现数据库读写分离
查看>>
wenbao与极角排序
查看>>
回顾JAVA---3.异常
查看>>
data Binding
查看>>
SSM配置
查看>>
HDU 5957 Query on a graph
查看>>
java基础语法
查看>>
Java中Runnable和Thread的区别
查看>>
spring基础概念AOP与动态代理理解
查看>>
洛谷 P1387 最大正方形
查看>>
洛谷 P3371 【模板】单源最短路径(弱化版) && dijkstra模板
查看>>
洛谷 P1082 同余方程(同余&&exgcd)
查看>>
洛谷 P5020 货币系统
查看>>
洛谷 P1077 摆花
查看>>
洛谷 P5019 铺设道路(差分)
查看>>
洛谷 P3865 【模板】ST表
查看>>
洛谷 P1025 数的划分
查看>>
洛谷 P1057 传球游戏
查看>>
洛谷 P1091 合唱队形
查看>>
洛谷 CF804B Minimum number of steps
查看>>