面试官问我 Java 是值传递还是引用传递

面试官问我 Java 是值传递还是引用传递

0 概述

  • Java 的参数传递机制是一个常见的面试题,讨论的焦点通常是 Java 是值传递还是引用传递。在本文中,我将针对这个问题进行分析,方便后续和面试官进行 battle。
  • 先上结论:Java 的参数传递机制是基于值传递(Pass-by-Value)。简单来说,当我们将一个变量作为参数传递给一个方法时,实际上是将这个变量的值传递给了方法内部的形参,而不是将变量本身传递进去。这意味着方法内部对形参的修改不会影响到原始的变量。

1 注意事项

  • 尽管 Java 的参数传递机制是基于值传递,但对于引用类型的参数,需要特别注意它们的行为。在 Java 中,引用类型的变量存储的是对象的引用(内存地址),而不是对象本身。当我们将一个引用类型的变量作为参数传递给一个方法时,实际上是将这个引用的副本传递给了方法内部的形参。因此,方法内部对形参所引用的对象进行的操作,会影响到原始的对象。

  • 然而,需要注意的是,如果在方法内部对引用进行了重新赋值操作,即改变了引用所指向的对象,那么这个改变不会影响到原始的引用。这是因为方法内部的引用只是原始引用的一个副本,它们指向的是不同的内存地址。

2 代码示例

  • 为了更好地理解 Java 的参数传递机制,下面通过一个简单的代码示例来演示:

    /**
    *	@作者 Jasper
    *	@公众号:EzCoding
    */
    public class PassByValueDemo {
        public static void main(String[] args) {
            int num = 10;
            Person person = new Person("Jasper");
    
            modifyValue(num);
            System.out.println("基本数据类型,被修改后的值是: " + num);
    
            modifyReference(person);
            System.out.println("引用数据类型,被修改后的值是: " + person.getName()); // 影响原始的引用
    
    		modifyAtMethodInner(person);
        	System.out.println("在方法内对引用进行重新赋值后的结果:" + person.getName());  // 不会影响原始的引用
        }
    
        public static void modifyValue(int value) {
            value = 20;
        }
    
        public static void modifyReference(Person person) {
            person.setName("EzCoding");
        }
    
    	public static void modifyAtMethodInner(Person person) {
        	person = new Person("xxx");
    	}
    	
    }
    
    class Person {
        private String name;
    
        public Person(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    /**
    * 输出:
    * 	基本数据类型,被修改后的值是: 10
    *	引用数据类型,被修改后的值是: EzCoding
    *	在方法内对引用进行重新赋值后的结果:EzCoding
    */
    
  • 从输出结果可以看出:

    • 尽管在 modifyValue() 方法中修改了 value 的值,但是在 main 方法中的 num 变量的值并没有受到影响
    • 而在 modifyReference() 方法中修改了 person 所引用的 Person 对象的名字,这个改变影响到了 main 方法中的 person 对象(因为引用还是原来的对象,把对象原来的值修改了)
    • 但是在 modifyAtMethodInner() 方法中,对 person 对象进行了重新赋值操作, 相当于改变了对象的引用(即内存地址被改变了),因此即使是设置值为 xxx,也不会影响到原对象的值

  • 以上就是 Java 是值传递的全部内容了,快去和面试官对线吧~

  • 创作不易,感谢阅读,若遇到问题,可以关注此微信gzh:EzCoding 留言反馈,希望能够帮助到您

用 XCO 库一键找出某个 ABAP 类的全部子类 ABAP XCO库子类枚举技术解析 本文介绍了在ABAP项目中如何利用XCO库高效获取类的继承层次结构。传统方法使用CL_ABAP_CLASSDESCR或手动维护映射表存在效率低、易遗漏的问题。新方法通过XCO库的IF_XCO_AO_CLASS接口,可简洁地获取父类的所有子类(包括间接子类)。 核心API链式调用: 获取类句柄:xco_cp_abap=>class() 导航子类集合:subclasses->all 获取结果:get()返回类引用表或get_names()返回类名列表 典型应用场景 阅读详情

相关推荐

S32K3xx系列DMA驱动实战:EB配置与Mcal接口应用全解析(含Adc硬件触发示例)

本文深入解析S32K3xx系列MCU的DMA驱动开发,涵盖EB工具配置与Mcal接口应用,特别包含ADC硬件触发示例。通过详细架构分析、实战配置步骤和工业级应用案例,帮助开发者掌握AUTOSAR环境下DMA高效数据传输技术,提升汽车电子和工业控制系统的性能。

weixin_29162439的博客 463

java是值传递还是引用传递

java是值传递;值传递是指在调用方法时将实际参数拷贝一份传递到方法中,这样在方法中如果对参数进行修改,将不会影响到实际参数;当传的是基本类型时,传的是值的拷贝,对拷贝变量的修改不影响原变量;当传的是引用类型时,传的是引用地址的拷贝,但是拷贝的地址和真实地址指向的都是同一个真实数据,因此可以修改原变量中的值。

u014212540的博客 6600

IPSec Over GRE和GRE Over IPSec技术

IPSec Over GRE 和 GRE Over IPSec 一. 技术介绍 IPsec     主要作用是对数据进行加密,因为他能提供所有有时候被单独用作实现加密的一种方法!IPsec建立的是一个逻辑隧道,并不是真正意义上的隧道!并且不能提供路由功能,因为IPsec不支持非ip流量,也不支持广播(组播)! GRE     (通用路由封装)能很好的提供一个真正意义上的点对点的隧道,GRE是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、Apple Talk、IP等)的报文进行封装,使封装后

qq_56228347的博客 9866

JAVA到底是值传递还是引用传递?结论:值传递

JAVA到底是值传递还是引用传递?结论:值传递1.形参和实参2.值传递与引用传递3.JAVA中的值传递4.小结 Java到底是值传递还是引用传递呢?可能我们背过很多次,说java是值传递(当然,网上也有一些同学信誓旦旦的说java是引用传递,错误),但是当我突然再问你java为什么是值传递的?那可能就有点懵了。 1.形参和实参 JAVA是一种面向对象的编程语言,一个类中有属性和方法,我们这里重点说下方法的定义。 package com.donkey; public class Person {

泗水长流的博客 753

Oasys安装教程

在基环境下执行然后去 C:\Users.condarc打开 .condarc这个文件 删除干净里面的东西。

weixin_44254178的博客 1294

淘宝x-mini-wua生成机制与硬件信息关联性深度解析

本文深度解析了淘宝x-mini-wua的生成机制与硬件信息的关联性,详细介绍了其作为设备指纹令牌的核心作用及技术实现细节。通过分析基础硬件层、环境特征层和行为特征层的数据采集,揭示了淘宝如何利用AES加密和分级加密策略防止破解,并探讨了其安全防护与对抗策略。

weixin_29243279的博客 228

Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?

在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很多...

程序员入门进阶 2086

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

Java 引用传递

在 Java 中,变量可以存储基本类型的值或对象的引用。当一个对象的引用被传递给一个方法或函数时,实际上传递的是该对象的引用而不是对象本身。这种传递方式被称为引用传递。在引用传递中,方法或函数可以修改传递进来的对象,这个修改可以在函数外部得到反映。这与值传递不同,值传递只是将对象的值进行拷贝,不会对原对象进行修改。引用传递是 Java 中一个重要的概念,它可以使得函数或方法可以修改传入的对象。在 Java 中,引用传递的实现方式是通过将对象的引用作为参数传递给方法或函数来实现的。

hj1993的博客 5766

《SOC架构-ARM架构-文档导读》-目录

小白请看“Armv8/Armv9架构从入门到精通”专栏。以翻译为主的,深度深度深度深度/深入深入深入 学习ARM架构的文章。

baron-周贺贺-代码改变世界ctw 2083

【RT-DETR有效改进】利用EMAttention加深网络深度提高模型特征提取能力(特征选择模块)

本文给大家带来的改进机制是EMAttention注意力机制,它的核心思想是,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中的通道权重,并通过跨维度交互来捕获像素级别的关系。本文改进是基于ResNet18、ResNet34、ResNet50、ResNet101,文章中均以提供,本专栏的改进内容全网独一份深度改进RT-DETR非那种无效Neck部分改进,

Snu77的博客 3167

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

类型传递方式是否影响原始变量是否能改变引用指向基本类型值传递❌N/A引用类型引用地址的值✅ 可改内容❌ 不能改引用本身Java 只有值传递,对于引用类型,传递的是对象引用的副本值,可以通过引用修改对象的内容,但不能改变原始引用的绑定关系。需要我帮你画一张引用传递/值传递对比图,或者写一套行为验证用例方便测试?

weixin_46072507的博客 1225

matlab 点云泊松盘采样

本文介绍了泊松盘采样算法在三维点云处理中的应用。该算法通过最小间距约束(任意两点距离≥r)和均匀分布特性,生成高质量、均匀分布的点集。文章详细阐述了参数设置(如采样半径、候选点数),并与体素栅格、随机采样等方法进行了对比。代码实现部分展示了MATLAB版本的泊松盘采样算法,包括KD树加速和候选点生成机制。实验结果表明,该方法能有效保持点云特征,适用于点云简化、曲面重建等场景。文中还提供了参数调整建议和不同应用场景下的使用指导。

点云侠的博客 536

当面试官问我————Java是值传递还是引用传递?

面试官:你好,你能说出下面个程序的执行结果吗? public class Test { public static void main(String[] args) { String name = "Scott"; int age = 5; User user = new User(); user.setName(name); user.setAge(age); S...

Morty的技术乐园 7811

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java参数传递:值传递还是引用传递?看完这篇别再被面试官问倒了!

误区1:“Java对象是引用传递,所以方法内能改原引用。反驳:若真是引用传递,方法中的应该能改变外部的user变量,但实测不行!误区2:“基本类型是值传递,对象类型是引用传递。反驳:对象传递的仍是引用的值(地址副本),而非引用本身,因此仍是值传递。一句话结论:Java只有值传递!对象类型传递的是引用地址的副本。面试技巧先明确值传递和引用传递的定义。通过“能否修改原引用指向”来反驳“对象是引用传递”的错误观点。画内存图解释,瞬间征服面试官!

qq_62775328的博客 730

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Java基础面试题021】Java中的参数传递是按值还是按引用?

关于引用的回答后,面试官可能会接着问不可变类。不可变类在多线程环境中不需要额外的同步控制,因为它们的状态一旦创建就不能改变。,不论是基本数据类型还是引用类型。在Java中,参数传递。

lklalmq的博客 372

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

面试官:兄弟,说说Java到底是值传递还是引用传递

二哥,好久没更新面试官系列的文章了啊,真的是把我等着急了,所以特意过来催催。我最近一段时间在找工作,能从二哥的文章中学到一点就多一点信心啊! 说句实在话,离读者 trust you 发给我这段信息已经过去 1 周时间了。不是我怠慢,确实是可更新的内容实在是太多了。这不,又有两个读者不约而同地要求我更新一下 Java 到底是值传递还是引用传递方面的文章——其实这个问题我之前是写过的,但现在看起来...

沉默王二 6662

面试官刁难:Java字符串可以引用传递吗?

老读者都知道了,六年前,我从苏州回到洛阳,抱着一幅“海归”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的手机通讯录里。他当时扔了一个面试题把我砸懵了:“王二,Java 字符串可以引用传递吗?” 我当时二十三岁,正值青春年华,从事 Java 编程已有 N 年经验(N < 4),自认为所有的面试题都能对答如流,结果没想到啊,被“刁难”了—...

沉默王二 1万+

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

先说下答案: Java中其实还是值传递的,只不过对于对象参数,值的内容是对象的引用。 如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 如果参数是引用类型,传递的是该参量所引用的对象在内存中地址值的拷贝。 一句话概括值传递和引用传递的区别: 值传递是传递实参副本,函数修改不会影响实参;引用传递是传递实参地址,函数修改会影响实参。 下面一个简单的面试题解释下: 面试官:你好,你能说出下面个程序的执行结果吗? public class Test { public static

水逆呱的博客 2392

Java中的值传递 vs 引用传递本质区别

【摘要】Java参数传递机制本质上是值传递,而非引用传递。对于基本类型直接传递值副本,对象类型传递引用副本。关键点:1) 修改对象属性会影响原对象;2) 重新赋值引用副本不会改变原引用;3) 数组/集合元素修改会同步,但重新赋值引用无效。常见误区包括混淆对象属性修改与引用赋值,以及误判String的特殊性。实际开发中90%场景可归为三类:对象属性修改、集合操作和数组处理。Java选择值传递是为了保证安全性和简化内存管理。面试时应明确:Java只有值传递,所谓"引用传递"实为引用副本的值传

Java开发者,专注后端技术分享,深耕框架实战与架构优化,持续输出优质技术干货。 1576

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

就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。/*** @author 一灯架构* @apiNote Java传递示例**/String name = "一灯架构";// 这里的name就是实际参数}// 这里方法参数列表中name就是形式参数}}在Java方法调用的过程中,就是把实参传递给形参,形参的作用域在方法内部。

m0_73311735的博客 2978

integer是值传递还是引用传递_面试官:兄弟,说说Java到底是值传递还是引用传递?

二哥,好久没更新面试官系列的文章了啊,真的是把我等着急了,所以特意过来催催。我最近一段时间在找工作,能从二哥的文章中学到一点就多一点信心啊!说句实在话,离读者 trust you 发给我这段信息已经过去 1 周时间了。不是我怠慢,确实是可更新的内容实在是太多了。这不,又有两个读者不约而同地要求我更新一下 Java 到底是值传递还是引用传递方面的文章——其实这个问题我之前是写过的,但现在看起来答案似...

weixin_39612122的博客 176

integer是值传递还是引用传递_面试官:兄弟,说说Java到底是值传递还是引用传递

原文地址:面试官:兄弟,说说Java到底是值传递还是引用传递原文作者:沉默王二来源平台:微信公众号说句实在话,离读者 trust you 发给我这段信息已经过去 1 周时间了。不是我怠慢,确实是可更新的内容实在是太多了。这不,又有两个读者不约而同地要求我更新一下 Java 到底是值传递还是引用传递方面的文章——其实这个问题我之前是写过的,但现在看起来答案似乎不够尽善尽美,所以打算以面试的角度重写一...

weixin_39836876的博客 142

面试官:Java为什么只有值传递?

面试官爱问的一个基础问题:Java是值传递还是引用传递?想必大家都对这个问题都有自己的看法,那到底事实是怎样的,我们又该如何回答面试官这个问题呢?今天咱们就来好好分析一波值传递?引用传递...

HollisChuang's Blog 765
上一篇: 天不生线程池,Java 万古如长夜!
下一篇: Java 线程池内存队列满了怎么办?
JavaJasper
博客等级 码龄5年 376粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值