java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)
代码部分:
public static void main(String[] args) {
testInt();
testString();
testArray();
testX();
}
public static void testInt() {
int a = 1;
int b = a;
a = 2;
System.out.println("b = "+b);
changeInt(a);
System.out.println("a = "+a);
}
public static void testString() {
String a = "1";
String b = a;
a = "2";
System.out.println("b = "+b);
changeString(a);
System.out.println("a = "+a);
}
public static void testArray() {
int[] a = {1,2,3};
int[] b = a;
a[0] = 2;
System.out.println("b[0] = "+b[0]);
changeArray(a);
System.out.println("a[0] = "+a[0]);
}
public static void testX() {
X a = new X("1");
X b = a;
a.setValue("2");
System.out.println("b.value = "+b.getValue());
changeX(a);
System.out.println("a.value = "+a.getValue());
}
static void changeInt(int a) { a = 100;}
static void changeString(String a) { a = "100";}
static void changeArray(int[] a) { a[0] = 100;}
static void changeX(X a) { a.setValue("100");}
输出结果补充,如下:
b = 1
a = 2
b = 1
a = 2
b[0] = 2
a[0] = 100
b.value = 2
a.value = 100
结果分析:
将数据赋值或当做参数传递的时候:
1,对于基本数据类型,String类, Integer, Double等immutable的类型 都是 值传递;
2,对于数组,其他类等,都是引用传递;
图形表达:

//2018-9-17更新
如果非要谈论是否java里只有值传递,可以把引用传递看成:实际上传递了引用的值。
补充代码与输出如下
public static void testX02() {
X a = new X("1");
changeX02(a);
System.out.println("a.value = "+a.getValue());
}
static void changeX02(X a) {
a = new X("");
a.setValue("100");
}
上方代码输出结果:a.value = 1
也就是说testX02中的a,仍然指向最初定义value为“1”的对象;
当做参数调用changeX02后,只能通过引用去改变对象,不能去改变其指向对象;
所以传递的是引用的复制,也就是上图中的黄色箭头。
java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)的更多相关文章
- Java中到底是值传递还是引用传递?
Java中到底是值传递还是引用传递? 我们先回顾一下基本概念 实参和形参 参数在编程语言中是执行程序需要的数据,这个数据一般保存在变量中.在Java中定义一个方法时,可以定义一些参数, 举个例子: p ...
- Java中真的只有值传递么?
Java中真的只有值传递么? (本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨) 回顾值传递和引用传递 关于Java是值传递还是引用传递,网上有不一样的说法. 1.基本类型或基本类型 ...
- 面试题:Java中为什么只有值传递?
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 经典的问题 形参&实参 Java是 ...
- java中的参数传递——值传递、引用传递
参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递. 在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用 ...
- java中函数是值传递还是引用传递?
相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test ...
- 2013年6月19日星期三java中函数地址值传递
今天代码审核时确认了一个问题,理解了java中string和stringbuffer赋值问题,看到一个帖子很好,摘录如下: 理解这两个例子需要分清实参和形参的区别,引用和对象的区别 第一个例子的内部执 ...
- Java中关于static语句块的理解
Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...
- Java中引用类型变量,对象,值类型,值传递,引用传递 区别与定义
一.Java中什么叫做引用类型变量?引用:就是按内存地址查询 比如:String s = new String();这个其实是在栈内存里分配一块内存空间为s,在堆内存里new了一个Stri ...
- java 传参方式--值传递还是引用传递
java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用 ...
- Java的参数传递是值传递还是引用传递?
一.前言 首先先说结论,Java中方法参数传递方式是按值传递.如果参数是基本类型,传递的是基本类型的字面量值的拷贝.如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝. 接下来深入了解一 ...
随机推荐
- nodejs获取参数的方法
1 获取get的querystring参数 GET /test?name=fred&tel=0926xxx572 let aa = req.param("name"); l ...
- nginx 413 request entity too large解决办法
nginx 出现:413 request entity too large,一般是在上传图片的时候,上传的图片大小超过了服务器设置的最大上传大小,需要修改nginx和PHP的设置: (1)打开 /us ...
- 简明python教程八----输入/输出
通过创建一个file类的对象来打开一个文件,分别使用file类的read.readline或write方法来读写文件. 最后调用一个close方法来告诉Python我们完成了对文件的使用. poem= ...
- Numpy包简单介绍
详细介绍可以看Numpy帮助,也有很多资料,此文仅是一个简述性质的集成文章 1.简介 Numpy是Python的一个扩展包,语法和Matlab有很多相似之处.它支持高维数组和矩阵运算,也提供了许多数组 ...
- mysql数据库从删库到跑路之mysql库操作
一 知识储备 MySQL数据库基本操作知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student, ...
- phpcms v9模板制作常用代码集合
phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...
- mysql时间戳转换成可读时间格式
代码: SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S') 附:在mysql中,一个时间字段的存储类型是int(11),怎么转化成字符类型,比方 ...
- selenium+python—HTML生成报告代码
Python自动化测试生成HTML测试报告 HTMLTestRunner是Python标准库unittest单元测试框架的一个扩展,他生成易于使用的HTML测试报告. Ubuntu放置位置:输入Pyt ...
- 企业级hbase HA配置
1 HBase介绍HBase是一个分布式的.面向列的开源数据库,就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类 ...
- Http:UTF-8与GB2312之间的关系
UTF-8里包括GB2312.UTF-8是国际通用的标准(包括世界所有的语言),而GB2312(只是简体中文)只适合做中文的网站.假设你想做个中文网页,但是还可以翻成英文的话,就得用UTF-8.如果用 ...