Java值传递和引用传递基础分析

article/2025/9/12 22:44:43



(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/77688416冷血之心的博客)


        一年前我总结过一篇博客:Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题 这篇博客针对Java中值传递和引用传递举了几个例子,进行了分析。这篇博文将再次举出典型案例一起分析。


1、值传递的案例:

        @Testpublic void method1(){int x=0;this.change(x);System.out.println(x);}void change(int i){i=7;}
这毫无疑问输出是0


2、请说出以下代码的正确输出:

@Test
public void method1() {StringBuffer x = new StringBuffer("Hello");this.change(x);System.out.println(x);
}void change(StringBuffer i) {i.append(" world!");
}


这段代码的输出是:Hello world!

为什么?答案见下图:(哈哈,画的是丑了点哈~)第二个图是调用函数时出现的,函数change中所做的操作如图3所示,最后输出x时,引用变量指向的堆中发生了变化。所以输出为:Hello world!

3、请问下边代码的输出结果是什么?

@Test
public void method2() {StringBuffer x = new StringBuffer("Hello");change2(x);System.out.println(x);
}
void change2(StringBuffer i) {i = new StringBuffer("hi");i.append(" world!");
}

输出结果是:Hello,我们通过画图来分析分析究竟发生了什么?

由图可以看出来,在函数change2中将引用变量i重新指向了堆内存中另一块区域,下边都是对另一块区域进行修改,所以输出是Hello


4、接下来这道题,请大家给出答案?代码如下:

public class Main {public static void main(String[] args) {StringBuffer sb = new StringBuffer("Hello ");System.out.println("Before change, sb = " + sb);changeData(sb);System.out.println("After change Data(n), sb = " + sb);}public static void changeData(StringBuffer strBuf) {StringBuffer sb2 = new StringBuffer("Hi ");strBuf = sb2;sb2.append("World!");}
}

正确答案为:????

如果大家已经掌握了上边我画图的精髓,应该可以得出正确答案哦~



如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~


本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。




http://chatgpt.dhexx.cn/article/faIZAl59.shtml

相关文章

C#中的值传递和引用传递

在C#语言中,传递参数的方式有两种:值传递和引用传递。 在介绍这两种参数传递方式我们先简单理解一下值类型和引用类型。 在C#语言中的char,int,short,long,byte,float,double,boolean类型都是值类型,另外enum枚举类型和struct结构类型也是值…

Python值传递和引用传递(详细分析)

目录 1. 形参与实参 2. Python的数据类型 3.Python变量及其赋值 3.1 不可变对象赋值 3.2 可变对象赋值 3.3 变量删除 3.4 变量赋值总结 4.Python函数的参数传递 4.1 参数传递定义 4.2 不可变对象的参数传递 4.3 可变对象的参数传递 5.总结 6 不可变与可变对象赋值对…

Java值传递和引用传递详细说明(详细分析)

1. 形参与实参 我们先来重温一组语法: 形参:方法被调用时需要传递进来的参数,如:func(int a)中的a,它只有在func被调用期间a才有意义,也就是会被分配内存空间,在方法func执行完成后&#xff0…

Java中是值传递和引用传递

值传递 / 引用传递 值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。 引用传递:是在方法调用的时候,实参将自己的地址传递给形参,此…

Java的值传递和引用传递

Java的值传递和引用传递 值传递:对形参的修改不会影响到实参 。引用传递:对实参的修改能够影响到实参 **Java是值传递:如果是基本数据类型,就是复制一份值传递给形参;如果是引用类型,那就将引用复制一份&…

Java 值传递和引用传递

值传递:在调用函数的时候,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改的时候,就不会影响到原来的实际参数 引用传递:在调用函数的时候,将实际参数的地址直接传递函数中,这样在函数中对参数进行修改的时候,就会影响到实际参数值传递 引用传递…

go 语言值传递和引用传递

值传递 普通的值传递 package main import "fmt" func main(){fmt.Println(Hello("hello"," fpp")); } func Hello(stringName string,stringName2 string)(string){return stringNamestringName2; }string类型是引用传递吗? package main i…

Java 的值传递和引用传递

一、概述 Java数据类型分为基本类型和引用类型。相应的,变量也有两种类型:基本类型和引用类型。 1️⃣基本类型的变量保存原始值,即它代表的值就是数值本身。包含: 整型:byte,short,int&#…

java值传递和引用传递(附实例)

java值传递和引用传递(附实例) 1.数据类型1.1 基本数据类型1.2 引用数据类型 2.形参与实参2.1 函数中使用2.2 调用 3.值传递和引用传递3.1 定义3.2 例子3.3 结论 观前提示: 本文所使用的IDEA版本为ultimate 2019.1,JDK版本为1.8.…

java中的值传递和引用传递

个人理解,可能会有错误之处,请仔细甄别,谨慎参考!如有错误或不同见解请指出! 值传递(Pass By Value或者Call By Value)是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。…

【JAVA】值传递与引用传递

一.声明 Java中没有引用传递 二.值传递和引用传递 值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。 引用传递:是在方法调用的时候,实参将自…

值传递与引用传递详解

1、关于值传递 值传递:是指在调用函数时,将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,就不会影响到实际参数 如下图所示,当传递参数之前会将参数进行复制,函数中修改了参数&#xff0c…

值传递与引用传递的区别

一、值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 ​ 代码在内存中的执行流程: 1、首先加载main方法; ​ 2、接下来int number 100&#xff1…

什么是值传递,什么是引用传递?

1、什么是值传递,什么是引用传递? 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。引用传递(pass by referenc…

Java复习总结之快速区分值传递和引用传递

引言 为了搞清楚值传递和引用传递的区别,查阅了许多资料,加以自身理解,做出本篇博客用于记录。 概念 值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到…

华为应聘进展状态码解析(附加性格测试攻略)

多方查找咨询终于终于看到了自己的状态码,总结一下~ 性格测试攻略: https://blog.csdn.net/guomutian911/article/details/48915301 https://blog.csdn.net/twc829/article/details/51226358 https://blog.csdn.net/twc829/article/details/51226247 第三…

华为OD机试2023 最新最全备考攻略助你轻松上岸

【华为OD机试真题 2022&2023】真题目录 点这里 【华为OD机试真题】信号发射和接收 &试读& 点这里 【华为OD机试真题】租车骑绿道 &试读& 点这里 什么是华为OD 华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多…

idea 怎么导入maven项目

1、打开一个现有的IntelliJ IDEA工程,点击菜单的“File”->“new”->“Module from Existing Sources”。 更详细请点击:http://yayihouse.com/yayishuwu/chapter/1826

IntelliJ IDEA如何导入Gradle项目

https://blog.csdn.net/wangdong5678999/article/details/70255451 IntelliJ IDEA如何导入Gradle项目 栋先生 2017-04-20 10:14:03 95942 收藏 分类专栏: 其他 文章标签: idea intellij idea gradle 版权 最近学习Gradle,本文来重点介绍…

杂记——16.idea中导入maven项目

这篇文章我们来讲一下如何从Gitee上拉取项目,并将该项目导入到idea中 目录 1.拉取项目 2.idea导入项目 3.更改相关的配置 3.1更改maven仓库 3.2更改数据库的连接池 1.拉取项目 第一步:找到相关的项目地址 如图所示,在Gitee上找到相关的…