元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • 基础

    • Java随记
    • Java到底是值传递还是引用传递?
      • 一、基本概念
        • 1.1 形参&实参
        • 1.2 值传递&引用传递
      • 二、代码示例
        • 1.1 传递基本数据类型
        • 1.2 传递引用类型1
        • 1.3 传递引用类型2
      • 三、总结
    • Java中的自动装拆箱是什么?
    • Java中比较大小的方式
    • Java中的泛型是什么
  • 并发编程

  • JVM

  • Java基础
  • 基础
元月
2022-10-30
目录

Java到底是值传递还是引用传递?

# Java 到底是值传递还是引用传递?

# 一、基本概念

# 1.1 形参&实参

String hello = "Hello!";
// hello 为实参
sayHello(hello);
// str 为形参
void sayHello(String str) {
    System.out.println(str);
}
1
2
3
4
5
6
7
  • 实参(实际参数) :用于传递给函数/方法的参数,必须有确定的值。
  • 形参(形式参数) :用于定义函数/方法,接收实参,不需要有确定的值。

# 1.2 值传递&引用传递

  • 值传递 :方法接收的是实参值的拷贝,会创建副本。
  • 引用传递 :方法接收的直接是实参所引用的对象在堆中的地址的拷贝,同样也会创建副本

很多程序设计语言(比如 C++、 Pascal )提供了两种参数传递的方式,不过,在 Java 中只有值传递

# 二、代码示例

# 1.1 传递基本数据类型

public static void main(String[] args) {
    ParamTest pt = new ParamTest();

    int i = 10;
    pt.pass(10);
    System.out.println("print in main , i is " + i);
}

public void pass(int j) {
    j = 20;
    System.out.println("print in pass , j is " + j);
}

//输出结果
print in pass , j is 20
print in main , i is 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 1.2 传递引用类型1

public static void main(String[] args) {
    ParamTest pt = new ParamTest();

    String name = "Hollis";
    pt.pass(name);
    System.out.println("print in main , name is " + name);
}

public void pass(String name) {
    name = "hollischuang";
    System.out.println("print in pass , name is " + name);
}

//输出结果
print in pass , name is hollischuang
print in main , name is Hollis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 1.3 传递引用类型2

public static void main(String[] args) {
    ParamTest pt = new ParamTest();

    User hollis = new User();
    hollis.setName("Hollis");
    hollis.setGender("Male");
    pt.pass(hollis);
    System.out.println("print in main , user is " + hollis);
}

public void pass(User user) {
    user.setName("hollischuang");
    System.out.println("print in pass , user is " + user);
}

//输出结果
print in pass , user is User{name='hollischuang', gender='Male'}
print in main , user is User{name='hollischuang', gender='Male'}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 三、总结

Java 中将实参传递给方法(或函数)的方式是 值传递 :

  • 如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。
  • 如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。

参考:

  • 为什么 Java 中只有值传递? (opens new window)
  • 值传递还是引用传递? (opens new window)
#值传递#引用传递
Java随记
Java中的自动装拆箱是什么?

← Java随记 Java中的自动装拆箱是什么?→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式