当我们在学习第一门编程语言C语言的时候,对这样一个交换函数印象比较深刻
void swap(int a,int b){ int tem = a; a = b; b = tem; }
当我们调用这个方法时候,发现调用之后的结果并没有达到a、b值互换的效果。这也是我们第一次接触值传递。而对于这样一个函数来言,当时老师提供的方法是将a、b的地址传进去,姑且我们将其称为引用传递(虽然不是引用传递,但是原理有点类似,都是传递的地址)
java中可以传入的变量一般有两种:基本类型、类对象。
java中对于基本类型总是按照值传递的方式。而对于类对象而言,并不是将对象本身传递给方法,而是将对象的引用(首地址)传递给方法,但是值得注意的是,这个引用时按照值传递的方式。即,在方法体内,是对引用的一个副本进行操作的。就好像List list = new List()【这里我偷懒用了原始类型,泛型省略了,这是不应该的】; 当你把list作为参数传递给某个方法时,例如:
void func(List list){ list.add(1); }
当我们将list作为参数传给func时,其实里面的list并不是我们当时list了,你可以将其理解为:
List copy = list;
copy.add(1);
因为copy和list是同一个对象的引用,因此list对象的的确确是加了一个元素——1。
但是当我们进行这样的操作
void func2(List list){ list.add(1); List tem = new ArrayList(Arrays.asList(1,2,3,4)); list = tem; }
当我们进行这样的操作时,我们希望调用func2之后,list应该是[1,2,3,4];事实上,list的结果还是[1],这样解释可能比较清楚:
List copy = list; copy.add(1); List tem = new ArrayList(Arrays.asList(1,2,3,4)); copy = tem;
这样就可以很清楚的看到,copy = tem操作与list本身是毫无关系的,只是copy引用指向了tem,list只加了一个1,之后便再无变化。
上面这个例子其实已经说明了值传递和引用传递的区别,下面来看看数组:
数组本身其实是一个引用,数组的元素可以是基础类型,也可以是类对象。因此,如果方法中传的是数组的单个元素的话,那么跟上面讲的是没有任何区别的。如果方法中传入的是数组本身的话,那么完全可以将数组当成一个普通的对象来考虑的。大家可以看这里的一个WA代码,来想一下数组引用的情况。
相关推荐
总之,Java中的数组创建涉及声明和分配内存,而数组参数传递是通过值传递进行的,即传递数组的引用。了解这些基础知识对于编写高效、可维护的Java程序至关重要。希望本文提供的信息对你的学习有所帮助,如有任何疑问...
然而,数组`a`的第一个元素的值发生了变化,这是因为数组传递的是引用。 #### 引用传递 (Pass-by-reference) 当传递对象时,实际上传递的是对象的引用。这意味着方法内部对对象状态的修改会影响到原始对象。 例如...
- **C#** 和 **Java** 默认都是值传递,但在C#中,如果需要引用传递,可以使用 `ref` 关键字。 以上总结了C#和Java在源文件结构、命名空间和包管理、数据类型、控制流、数组以及方法定义等方面的相似点和差异。...
在Java中,方法参数传递总是按值传递,但对象引用(如数组)的值是对象的地址,因此对数组元素的修改在方法内部会直接影响到原始数组。 10.6 数组作方法参数 数组可以作为方法的参数,允许在方法内部对数组进行操作...
在Java编程语言中,数组是一种非常基础且重要的数据结构,用于存储同类型的多个元素。下面是对Java中数组相关知识的详细总结: 1. **数组的声明与初始化** - 在Java中,数组可以通过以下几种方式声明和初始化: -...
在Java中,如果A、B是基本的数据类型,可以用赋值的方式传递值。如果A、B是两个相同类型的数组,那么A=B相当于将数组A的引用传递给数组B;如果数组A发生改变,那么引用数组B也要发生改变。 在 Java 中实现数组复制有...
《Java基础小结》 Java,作为一种广泛应用的编程语言,以其跨平台、面向对象的特点深受开发者喜爱。这篇博文和随附的PDF笔记旨在总结Java的基础知识,帮助初学者巩固理解,同时也为有经验的开发者提供回顾参考。 1...
在“day09【常用API、引用类型小结】”的学习中,我们可能会涉及到以下关键知识点: 1. **常用API**:这部分可能涵盖各种常用库,例如Java的`java.util`包,其中包含集合框架(如ArrayList、HashMap)、日期时间...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...
- **总结**: Java中所有参数传递本质上都是值传递,只是对于引用类型而言,传递的是引用的值。 #### 三、Java中的数据类型 **3.1 基本数据类型** - **数值类型**: - `byte`: 8位,范围-128到127。 - `short`: 16...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
本书使用传记简介、引用以及哲学片段来突出计算的历史和理性背景,着重强调算法和问题解决,而今天的初级教科书通常忽略了这一点。 内容简介 自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在...
### Java多线程小结 #### 一、多线程的概念与意义 多线程是Java编程中的一个重要概念,指的是程序在运行时可以同时执行多个线程的能力。它能够提高程序的性能,尤其是在多核处理器的环境下。多线程使得程序能够更...
10.11 编程练习 第11章 数组与ArrayList类 11.1 数组简介 11.2 数组的内部表示法 11.3 数组作为参数传递 11.4 使用数组制作表格 11.5 数组初始化 11.6 多维数组 11.7 图像处理 11.8 ArrayList类 11.9 小结 ...
- **4.2.1 理解参数传递**:解释了Java中参数传递的基本机制,包括值传递和引用传递的概念。 - **4.2.2 注意final参数传递**:探讨了在方法签名中使用`final`关键字的含义及其影响。 - **4.3 类型转换** - **...
- **1.4 本章小结** - 对求职过程进行了总结,并强调了成功应聘的关键因素。 #### 二、Java试题篇 - **2.1 Java概述和开发环境** - **理解Java**:介绍Java的历史背景、特点及其应用场景。 - **构建Java开发...
#### 小结 通过本章节的学习,读者可以了解Java源文件的基本结构和组成元素,掌握如何使用JDK编译和运行Java程序,学会编写简单的Java应用程序,并能够生成文档。这对于进一步深入学习Java编程打下了坚实的基础。