zoukankan      html  css  js  c++  java
  • java引用数据类型在方法中的值传递

    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虚拟机的书.

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

    2015年10月-2016年3月 总计:5个月.
    2016年11月-2017年6月 总计:7个月.
    2017年7月-2018年4月 总计:9个月.
    2018年5月-2018年5月 总计:1个月.
    2018年6月-2018年12月 总计:6个月.
    2019年1月-2019年12月 总计11个月.
    2020年2月-2021年2月 总计13个月.
    所有总计:5+7+9+1+6+11+13=52个月(4年4个月).
    本人认同二元论.我是理想主义者,现实主义者,乐观主义者,有一定的完美主义倾向.不过,一直都是咸鱼(菜鸟),就算有机会,我也不想咸鱼翻身.(并不矛盾,因为具体情况具体分析)
    英语,高等数学,考研,其他知识学习打卡交流QQ群:946556683
  • 相关阅读:
    jQuery 语法
    jQuery 简介
    把数据存储到 XML 文件
    XML 注意事项
    XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。
    通过 PHP 生成 XML
    XML 命名空间(XML Namespaces)
    XML to HTML
    XMLHttpRequest 对象
    使用 XSLT 显示 XML
  • 原文地址:https://www.cnblogs.com/JimmySeraph/p/9641582.html
Copyright © 2011-2022 走看看