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

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

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

  1. Java传参-基本数据类型和引用数据类型作为参数的区别(值传递)

    java中的方法可以传递参数,参数的传递方法就是值传递. 参数有形参和实参,定义方法时写的参数叫形参,真正调用方法时,传递的参数叫实参. 调用方法时,会把实参传递给形参,方法内部其实是在使用形参. 所 ...

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

    public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...

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

    public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...

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

    值传递: (形式参数类型是基本数据类型和String):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参 ...

  5. Java中的值传递与引用传递

    1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型. 基本类型的变量保存原始值,即它代表的值就是数值本身: 而引用类型 ...

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

    转自:http://url.cn/5tL9F5D 值传递和引用传递 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际 ...

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

      题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...

  8. Java中只有值传递,(及值传递与引用传递详解)

    首先呢,我们来说一下值传递与引用传递的区别(这两个玩意儿实在调用函数的时候提到的) 比如说 code( a) code( int a ) code(a)是调用函数,a是我们原本函数的一个值类型,然后使 ...

  9. (转)Java中的值传递和引用传递

    Java中的值传递和引用传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?     答:是值传递.Java 编程语言只有值 ...

随机推荐

  1. mac系统下显示隐藏文件

    在终端上输入以下命令即可: 显示隐藏文件命令: defaults write com.apple.finder AppleShowAllFiles -bool true 不显示隐藏文件命令: defa ...

  2. 【转】js中15个常用的正则表达式+正则集合

    1 用户名正则 //用户名正则,4到16位(字母,数字,下划线,减号) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //输出 true console.log(uP ...

  3. Python装饰器单例

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/dutsoft/article/details/52057981#!/usr/bin/python#c ...

  4. r.json()

    requests模块中,r.json()为Requests中内置的JSON解码器 其中只有response返回为json格式时,用r.json()打印出响应的内容, 如果response返回不为jso ...

  5. 【OpenFOAM】——OpenFOAM入门算例学习

    1  明确目标——为啥费老大劲儿学习OpenFOAM 学习OpenFOAM主要出于课题需要,希望实现以下几个目标: l  [ ]学会用SnappyHexMesh生成高质量网格: l  [ ]学习使用O ...

  6. idea清除缓存和索引

    转自:https://blog.csdn.net/mzy755423868/article/details/80559381

  7. 3.ExtJs常用布局--layout详解(含实例)

    转自:https://blog.csdn.net/fifteen718/article/details/51482826

  8. 3.jeesite主从表开发

    1. 2 3. 4. 5. 6. 7. 8. 9. 10.

  9. Rails5终端基本命令

    更新: 2017/06/10 更新: 2017/06/21 增加迁移文件查看履历命令: rails db:migrate:status                           迁移文件生成 ...

  10. Step 4: Install and Configure Databases

    https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_installing_configuring_dbs.htm ...