java学习笔记
Java参数传递 基本数据类型和引用数据类型(表格对比)
本 文 目 录
在Java中,参数传递主要有两种方式:基本数据类型和引用数据类型的传递。这两种方式在传递过程中有不同的特性,如下表所示:
1、基本数据类型和引用数据类型参数对比
对比项 | 基本数据类型 | 引用数据类型 |
---|---|---|
参数传递方式 | 值传递 | 值传递(传递的是引用) |
是否改变原始数据 | 不会改变原始数据 | 可能改变原始数据(通过引用的方式) |
传递的内容 | 数据的副本 | 对象在内存中的地址(引用) |
示例类型 | int, float, char等 | 自定义对象,数组,集合等 |
让我们通过两个代码示例来更深入地了解这两种参数传递方式的区别。
2、基本数据类型的参数传递
public class Example1 {
public static void main(String[] args) {
int a = 10;
System.out.println("Before method call: " + a); // 输出:Before method call: 10
changeValue(a);
System.out.println("After method call: " + a); // 输出:After method call: 10
}
public static void changeValue(int num) {
num = 5;
System.out.println("Inside method: " + num); // 输出:Inside method: 5
}
}
步骤解释:
-
在
main
方法中,我们定义了一个整数a
并赋值为10。 -
然后我们调用
changeValue
方法,并将a
作为参数传递。注意,这里传递的是a
的副本。 -
在
changeValue
方法中,我们尝试修改num
的值。然而,这并不会影响到main
方法中的a
,因为num
只是a
的一个副本。 -
最后,我们在
main
方法中打印a
的值,发现它仍然是10,说明原始数据没有改变。
3、引用数据类型的参数传递
public class Example2 {
static class MutableObject {
int value;
public MutableObject(int value) { this.value = value; }
}
public static void main(String[] args) {
MutableObject obj = new MutableObject(10);
System.out.println("Before method call: " + obj.value); // 输出:Before method call: 10
changeValue(obj);
System.out.println("After method call: " + obj.value); // 输出:After method call: 5
}
public static void changeValue(MutableObject obj) {
obj.value = 5;
System.out.println("Inside method: " + obj.value); // 输出:Inside method: 5
}
}
步骤解释:
-
在
main
方法中,我们定义了一个自定义对象obj
并赋值为10。这个对象是可变的。 -
然后我们调用
changeValue
方法,并将obj
作为参数传递。注意,这里传递的是obj
的引用。 -
在
changeValue
方法中,我们通过引用修改了对象的值。这会影响到main
方法中的obj
,因为我们是通过引用来访问同一个对象的。 -
最后,我们在
main
方法中打印obj.value
的值,发现它现在是5,说明原始数据已经被改变。
- 上一篇
java接口和抽象类、普通类的区别表格
接口、抽象类和普通类是Java编程中重要的概念,它们在定义和实现类时具有不同的特性和用途。通过比较它们的定义、目的、继承机制、抽象方法、成员变量、构造函数和访问修饰符等方面的差异,我们可以更好地理解它们各自的作用和适用场景。
- 下一篇
Java中 对象赋值给另一个对象的4种方法
在Java中,对象赋值给另一个对象可以通过多种方式实现,以下是一些主要的方法及其特点:## 1、对象赋值给另一个对象的4中方式对比| 方法 | 描述 | 示例代码 || --- | --- | --- || 浅拷贝 | 拷贝对象的引用,不拷贝对象的内容。如果对象包含对其他对象的引用,那么这些引用也会被复制。 | `Object shallowCopy = originalObject;` || 深