代码部分:

    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类)的更多相关文章

  1. Java中到底是值传递还是引用传递?

    Java中到底是值传递还是引用传递? 我们先回顾一下基本概念 实参和形参 参数在编程语言中是执行程序需要的数据,这个数据一般保存在变量中.在Java中定义一个方法时,可以定义一些参数, 举个例子: p ...

  2. Java中真的只有值传递么?

    Java中真的只有值传递么? (本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨) 回顾值传递和引用传递 关于Java是值传递还是引用传递,网上有不一样的说法. 1.基本类型或基本类型 ...

  3. 面试题:Java中为什么只有值传递?

    作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 经典的问题 形参&实参 Java是 ...

  4. java中的参数传递——值传递、引用传递

    参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递. 在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用 ...

  5. java中函数是值传递还是引用传递?

    相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test ...

  6. 2013年6月19日星期三java中函数地址值传递

    今天代码审核时确认了一个问题,理解了java中string和stringbuffer赋值问题,看到一个帖子很好,摘录如下: 理解这两个例子需要分清实参和形参的区别,引用和对象的区别 第一个例子的内部执 ...

  7. Java中关于static语句块的理解

    Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...

  8. Java中引用类型变量,对象,值类型,值传递,引用传递 区别与定义

    一.Java中什么叫做引用类型变量?引用:就是按内存地址查询       比如:String s = new String();这个其实是在栈内存里分配一块内存空间为s,在堆内存里new了一个Stri ...

  9. java 传参方式--值传递还是引用传递

    java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用 ...

  10. Java的参数传递是值传递还是引用传递?

    一.前言 首先先说结论,Java中方法参数传递方式是按值传递.如果参数是基本类型,传递的是基本类型的字面量值的拷贝.如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝. 接下来深入了解一 ...

随机推荐

  1. 19.如何在vue里面调用其他js

    可以通过把js放到服务器,然后再html文件中通过链接的形式引入,这是目前我试过成功的唯一方法

  2. 深入了解SQL Tuning Advisor(转载)

    1.前言:一直以来SQL调优都是DBA比较费力的技术活,而且很多DBA如果没有从事过开发的工作,那么调优更是一项头疼的工作,即使是SQL调优很厉害的高手,在SQL调优的过程中也要不停的分析执行计划.加 ...

  3. windows 本地配置hadoop客户端

    下载解压 hadoop 至D:\hadoop2.6.0 配置环境变量 HADOOP_HOME=D:\hadoop2.6.0 下载hadoop windows插件  将dll文件放入C:\Windows ...

  4. JS:parseInt("08")或parseInt("09")转换返回0的原因

    一.parseInt用法 parseInt(s); parseInt(s,radix) 二.第一个方式不再多说,第二个方式,radix是s所基于的进制.范围为2-36(不在此范围函数将返回NaN). ...

  5. PKU 3041 Asteroids 最小点覆盖(最大匹配模板题)

    题目大意:给你一个N*N的矩阵, 里面有K个星球, 我们可以让武器攻击矩阵的一行或者一列来使得这个星球被击碎, 现在问你最少需要几个这种武器才能把所有的星球击碎? 解题思路:关键是建模构图 把每一行当 ...

  6. 20. Valid Parentheses(括号匹配,用桟)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  7. 235. Lowest Common Ancestor of a Binary Search Tree(LCA最低公共祖先)

      Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the ...

  8. Lua 数学类

    数学类主要有Vec2(坐标向量).Size(尺寸).Rect(矩形). 创建 在Lua中创建的 Vec2.Size.Rect 都是一个table类型. 其中只有相应的成员变量,没有相关的函数运算. c ...

  9. JFreeChart的简单应用及乱码解决

    一.JFreeChart介绍: JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP ...

  10. 无密码ssh操作步骤备忘

    需求:A机器无密码登陆到B机器 1.A机器执行   ssh-keygen -t rsa  ,在~/.ssh/下生成id_rsa 和  id_rsa.pub两个文件,其中id_rsa.pub是公匙 2. ...