Java中的参数传递问题:

基本类型:形式参数的改变对实际参数没有影响。在参数传递过程中,形参和实参占用了两个完全不同的内存空间。

引用类型:形式参数的改变直接影响实际参数。在参数传递的过程中,形参和实参指向的是同一块内存空间。

基础数据类型(int,char,……)传值,对象类型(Object,数组,容器……)传引用。

有说java方法参数都是传值的,理解方式不同而已。引用本身也是值(对象地址)。

传值方式,是该值赋给了另外一个内存空间的变量 ,作用的内存空间不同,所以不改变本身的值。

传引用方式,传递的是引用的内存地址值。此时,形参和实参指向同一个内存地址。对形参所指向的对象的修改,如修改对象属性、容器内容等,会影响到调用方。对形参本身(对象地址)的修改,如设置为null,重新指向其他对象,不会影响到调用方。

<pre name="code" class="java">public class bb {

	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int[] arr = new int[] { 1, 2, 3, 4, 5 };
		System.out.println("a=" + a + ",b=" + b);// 结果为a=10,b=20
		change(a, b);
		System.out.println("a=" + a + ",b=" + b);// 结果为a=10,b=20
		change(arr);
		System.out.println(arr[1]);//arr[1]=4
	}

	public static void change(int a, int b) {
		System.out.println("a=" + a + ",b=" + b);// 结果为a=10,b=20
		a = b;
		b = a + b;
		System.out.println("a=" + a + ",b=" + b);// 结果为a=20,b=40
	}

	public static void change(int[] arr) { // arr={1,2,3,4,5};
		for (int x = 0; x < arr.length; x++) {
			if (arr[x] % 2 == 0) {
				arr[x] *= 2;
			}
		}
		// arr={1,4,3,8,5};
	}
}

												

Java学习之参数传递详解的更多相关文章

  1. Java学习之多线程详解

    一.多线程的实现 1.继承Thread类 ​ a.子类继承Thread类具备多线程能力 ​ b.启动线程:子类对象.start() ​ c.不建议使用:避免OOP单继承局限性 package com. ...

  2. C++并发与多线程学习笔记--参数传递详解

    传递临时对象 陷阱 总结 临时对象作为线程参数 线程id的概念 临时对象构造时的抓捕 成员函数指针做线程函数 传递临时对象作为线程参数 创建的工作线程不止一个,线程根据编号来确定工作内容.每个线程都需 ...

  3. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

  4. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  5. java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock

    原文:java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock 锁 锁是用来控制多个线程访问共享资源的方式,java中可以使用synch ...

  6. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  7. java.lang.Thread类详解

    java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...

  8. Java内存模型(JMM)详解

    在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...

  9. Java并发关键字Volatile 详解

    Java并发关键字Volatile 详解 问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充: 缓存一致性协议 ...

随机推荐

  1. vim 去除代码行号并正常缩进代码

    先命令模式下输入 :%s/[ \t]*\d\{1,4\}/ 即使用正则表达式替换   后命令模式下输入 gg 调到行首 v 进入可视化 G 调到行尾 = 所有代码正常缩进  

  2. tarjan——cogs 1298 通讯问题

    1298. 通讯问题 ★   输入文件:jdltt.in   输出文件:jdltt.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 一个篮球队有n个篮球队员,每个队员 ...

  3. [HNOI2012]射箭

    Description 沫沫最近在玩一个二维的射箭游戏,如下图 1 所示,这个游戏中的 x 轴在地面,第一象限中有一些竖直线段作为靶子,任意两个靶子都没有公共部分,也不会接触坐标轴.沫沫控制一个位于( ...

  4. Codeforces Round #460 D. Karen and Cards

    Description Karen just got home from the supermarket, and is getting ready to go to sleep. After tak ...

  5. MQ(消息队列)常见的应用场景解析

    前言 提高系统性能首先考虑的是数据库的优化,之前一篇文章<数据库的使用你可能忽略了这些>中有提到过开发中,针对数据库需要注意的事项.但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所 ...

  6. Elasticsearch 创建、更新、删除文档、处理冲突

    ----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...

  7. dfsdf

    This project was bootstrapped with Create React App. Below you will find some information on how to ...

  8. eclipse创建web项目修改路径

  9. easyui combobox setValue数据绑不上

    var synj = "<%=arrbj[3]%>"; var xnxq = "<%=xnxq%>"; OnchangeSelect($ ...

  10. 关于 printf scanf getchar

    float默认小数6位 右对齐.-m 左对齐 在调用printf函数输出数据时,当数据的实际位宽大于printf函数中的指定位宽时,将按照数据的实际位宽输出数据. .n表精度 输出%符号 注意点 #i ...