java传参问题
参考链接:https://www.cnblogs.com/linkstar/p/5951141.html
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);
System.out.println(ex.testCharArray);
} public void change(String testString,char[] testCharArray){
testString = "hhhhhh"; // 4
testCharArray[0] = 'w'; //
}
}
good
wbc
查看输出结果
解释原因:
在不同地方可以看到java有两种传递方式:值传递和引用传递。其实引用传递也是一种值传递,只不过此时的值是一个内存地址。
第一步:代码中的 1 和 2 执行完毕之后,内存分配如图所示:
第二步:在代码中的 3 执行的时候,这些引用会创建一个副本,这些副本的引用所指向的地址与之前一样。内存分配如图所示:
第三步:执行代码中的 4 的时候,由于字符串的不变性,所以此时需要在需要重新建立一个内存存放字符串"hhhh";并将testString(副本)的引用指向新的内存地址;
执行代码的5的时候,因为数组改变了第0个位置,所以就是把字符a变成了字符w,不会开辟新空间;所以testCharArray的引用地址不会改变。
此时的内存地址分配如下:
第四步:当代码3这一行的函数执行完毕之后,此时testString(副本)和testCharArray(副本)已经不存在了;此时内存分配如下:
所以最终输出的应该是good和wbc
如果有任何异议,请指出。谢谢
java传参问题的更多相关文章
- Java传参那些事!
刚刚学习java传参的时候很纠结,也非常的不理解!课本上的“按值传递”和“按址传递”搞的自己是一头雾水,后来写的项目多了,自然就明白了! 现在写传参几乎就是条件反射一般——“秒成”,分享当初自己为此写 ...
- Java传参都是传引用变量的副本
最近做练习时碰到一个问题,Java到底是怎样传参的,经过查资料与实验,我发现Java传参都是传引用变量的副本值. 1 Java中的引用变量 1.1 字面值引用变量:即基本数据类型的引用变量 ,如 in ...
- java 传参方式--值传递还是引用传递
java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用 ...
- 使用java传参调用exe并且获取程序进度和返回结果的一种方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中需要考虑使用java后台调用由C#编写的切图程序( ...
- 深入分析java传参
概述 java中的参数传递问题可以根据参数的类型大致可以分为三类:传递基本类型,传递String类型,传递引用类型,至于最终是否可以归纳为值传递和引用传递,根据每个人的理解不同,答案不同,此 ...
- Java传参-基本数据类型和引用数据类型作为参数的区别(值传递)
java中的方法可以传递参数,参数的传递方法就是值传递. 参数有形参和实参,定义方法时写的参数叫形参,真正调用方法时,传递的参数叫实参. 调用方法时,会把实参传递给形参,方法内部其实是在使用形参. 所 ...
- String的按值传递,java传参都是传值
java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? String和int参数传递是按值传递还是引用传递? 一道面试题目,String的传递: public String change( ...
- Java传参
1. 如果参数是基本数据类型(int.long等),传值.方法内部改变参数值,外部值不变. 2. 如果参数是对象类型,传地址.方法内部改变对象值,外部对象值改变.但是,如果方法内部调用new重新构 ...
- Java传参:值传递 or 引用传递 ?
刚开始学Java的时候一度以为:基本数据类型是值传递,引用类型是引用传递.新人很容易在这两个概念上面被搞糊涂,后来看了Hollis的文章才明白了Java中只有值传递. 接下来我能用简单明了的方式来说明 ...
随机推荐
- 简述MySQL数据库中的Date,DateTime,TimeStamp和Time类型
DATETIME类型 定义同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00' ...
- 关于C#中Partial局部类型关键字的使用
虽然之前在做Winform开发时候,经常遇到Partial关键字,但是最近在代码中看到使用Partial将同名类文件写在多个源文件中,因此想要记录下Partial的详细使用. Partial type ...
- 有效括号算法题(Golang实现)
有效括号算法题 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空 ...
- Mac LaTex中文环境搭建
为了在博客上写公式,折腾了一晚上Mac上的LaTex的环境搭建,本文对步骤进行记录. 系统:Mac OSX 10.10.5 软件准备 1) MacTex 2015 Distribution (Tex的 ...
- KVC讲解
今天趁着项目bug修复完了,来讲解一下OC知识的另一个技术点-KVC!针对KVC,讲解两个知识点 通过KVC修改属性会触发KVO么? KVC的赋值过程是怎样的?原理是什么? KVC的取值过程是怎样的? ...
- Java中的get()方法和set()方法
在Java中,为了数据的安全,换句话说就是为了隐藏你的代码的一些实现细节,我们会用private来修饰属性,使用private修饰的属性就不能被其他类直接访问了,想要访问就需要通过set.get方法: ...
- Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty messa
1.git提交的时候遇到: # Please enter the commit message for your changes. Lines starting with '#' will be ig ...
- Java学习笔记--Arrays
Arrays(数组工具类)常用方法 Arrays.toString(int[] a)方法 -------> 返回类型为String,可以用来产生数组的可打印表示,避免了用循环依次读取数组值进 ...
- 安装 elasticsearch For LINUX
官网下载地址 https://www.elastic.co/cn/downloads/elasticsearch 选择版本为LINUX 当前版本为 es-7.6.2 用tar 命令解压 tar -zx ...
- 使用Scanner接受用户键盘输入的值
第一步导入Scanner import java.util.*; 第二步创建Scanner对象 Scanner input = new Scanner(System.in); 第二步创建Scanner ...