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

原文地址:https://www.cnblogs.com/JimmySeraph/p/9641582.html

时间: 2024-10-28 21:11:02

java引用数据类型在方法中的值传递的相关文章

【Java基础】11、java方法中只有值传递,没有引用传递

转自:http://www.cnblogs.com/linkstar/p/5951141.htmlpublic class Example { String testString = new String("good"); char[] testCharArray = {'a','b','c'}; public static void main(String[] args){ Example ex = new Example(); ex.change(ex.testString,ex.

java方法中只有值传递,没有引用传递

public class Example { String testString = new String("good"); char[] testCharArray = {'a','b','c'}; public static void main(String[] args){ Example ex = new Example(); ex.change(ex.testString,ex.testCharArray); System.out.println(ex.testString)

Java中的值传递与“引用传递”

首先,Java没有 引用传递 这么一说. Java只有值传递,传递的都是值,基本数据类型传递的是值,引用类型传递的是地址值. 我来理一下这其中犹如米线跟米面绞在一起了,再跟粉丝混在一起的关系. 好的,我们来看第一个例子: public static void main(String[] args) { int a = 1; int b = 4; System.out.println("Before : a=" + a + "," + "b=" +

java中的值传递和引用传递有什么区别呀?

值传递: (形式参数类型是基本数据类型和String):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值. 引用传递: (形式参数类型是引用数据类型参数除去String):也称为传地址.方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数

理解--->Java中的值传递&引用传递

转自:https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247486882&idx=2&sn=0056f7c027b0db429650ea4df03985e5&chksm=ebd6328edca1bb9804927cb66bad1bb9d54e542bfea5b7ff9f9432603b919460ee601f12baf6&mpshare=1&scene=23&srcid=0113FJUlz

一道笔试题来理顺Java中的值传递和引用传递

前段时间参加了一场面试,其中有一道引用传递的题,因为当时并没有考虑清楚所以做错了. 现在来复盘一下,题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = new StringBuffer("new world"); str12.append("new world");} public static void main(Stri

"java语言中只有值传递,没有引用传递"的理解

创建一个类Human public class Human { private int age; private int sex;//0-女,1-男 public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } } 测试类 c

浅析java中的值传递与引用传递

public class Test { public static void main(String[] args) { String s = new String("aaa"); change(s); System.out.println(s); StringBuilder sb = new StringBuilder("111"); change(sb); System.out.println(sb); } static void change(String s

一道 Java 方法传值面试题——Java方法传值的值传递概念和效果 + Integer 缓存机制 + 反射修改 private final 域

原题代码如下: 1 public void test1() { 2 int a = 1, b = 2; 3 System.out.println("before: a=" + a + ", b=" + b); 4 swap1(a, b); 5 System.out.println("after: a=" + a + ", b=" + b); 6 } 7 8 private void swap1(int i1, int i2)