JAVA里面方法调用时传对象参数的陷阱

Java方法详解:定义、调用与参数传递 Java方法核心概念包括方法签名(方法名+参数类型)、重载规则(参数列表不同)以及参数传递机制(传值调用)。方法重载通过参数差异化实现,需注意自动装箱和varargs的解析优先级。Java8引入Lambda表达式简化行为参数化,提升代码复用性与可读性。反射机制(Method.invoke)支持动态方法调用,但需权衡性能与安全性,适用于框架开发等特殊场景。这些特性共同构成了Java方法调用的核心体系,广泛应用于阿里云、微博等大型系统开发中。 阅读详情


类似的问题,又被人问到了几次,决定还是简单总结一下吧。这个问题,一些老手已经很清楚了,但有时也会很不小心的被XX了一把。

 


其实问题的核心,就是参数虽然是传的引用,但参数就是参数,他自身是一个本地的局部引用而已,只不过在这个时刻和调用者指向了同一个对象。但并不代表这个局部引用在整个方法调用期间内能始终和调用者保持一致。


下面是2个测试,分别测试可修改的Object和不可修改的



运行结果

15
true
20
false
20
15
true
false
15
false
15



希望这个例子能解开一些初学者的疑问。



更对JAVA面试题和JAVA学习资料,请到JAVA世纪网


10、Java 编程中的方法调用与对象引用使用 本文详细介绍了 Java 编程中方法调用和对象引用的使用,包括方法调用的流程、参数传递规则、返回值处理以及对象引用赋值对程序运行的影响。同时,文章通过示例代码展示了如何正确使用对象方法和处理常见错误,如非法参数设置和空引用调用导致的 NullPointerException。此外,还概述了 Java 类库的基本分类和使用方法,为编写高效可靠的 Java 程序提供了实践建议。 阅读详情

相关推荐

关于影响力最大化问题中贪心算法的一些理解

在影响力最大化问题中(Influence Maximization,以下简称IM),贪心算法是最早提出的一种解决方法,并且一直沿用至今。它基于IM问题所具有的单调性(Monotonicity)和子模性(Submodularity)使用一种Hill Climbing策略,不断使用Monte Carlo模拟来寻找在当前情况下的具有最大传播范围的节点,添加至种子集合,得到最终结果,算法伪代码如下所示: 这里算法1其实并没有使用MonteCarlo模拟,而只是使用了贪心的策略...

nianjuan1990的专栏 2852

java对象作为方法参数传递到一个方法里,方法内对对象内容的操作会影响到该对象

java对象作为方法参数传递到一个方法里,方法内对对象内容的操作会影响到该对象 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 对象类型参数传递 –改变值 基本数据类型参数传递 –不改变值 package test; import java.util.ArrayList; import java.util.List; public class main { public stati

weixin_44966968的博客 1831

Qi标准无线充学习笔记

负载调制主要通过接收端向后散射调制计数使得功率信号改变,两者通过线圈的电压和电流的变化量来传输信号。下面是要求稳定电流的变化量不得超出8ma,判断稳定的时间至少要在150us稳定电压的变化量不得超出110mv,判断稳定的时间至少要在150us高低电流变化量至少需要15mA,判断稳定的时间至少要在100us,主线圈电流采样的时间是在半桥转换的1/4周期刻测量的高低电压变化量至少需要200mV,判断稳定的时间至少要在100us。

m0_73991989的博客 1011

JAVA在方法中对象作为参数传递

java方法中只有值传递,没有传地址,这是和C语言一个较大的差别。在C语言中我们使用传地址,实参把自己的内存地址传给了形参,这样对实参的修改就有效了。但是在java中,将方法A中的某个对象传递到方法B中进行修改后,再返回到A中,我们会发现对象在B中的修改在A中也有效。示例代码如下:有一个bean类:public class DemoBean {    private String id;   pu...

yytoo2的博客 1万+

matlab球面投影(二)

matlab球面投影,想做一个全景相机,不知道,要做成啥样,于是在MATLAB先仿真一下,看下是个啥样子 百度别人做的,复制下面的代码到MATLAB的命令串口下,,网上找了张全景图,可以是bmp,jpg,改程序就可以了 回车运行就可以看到结果。 复制下面代码时,下面的中文注释记得删除,MATLAB是会报错的, close all; clear all; clc [x,y,z]=sphere(50); A=imread('a.JPG'); //名字是自己命名的,记得改 B=warp(x,y,-z,

rjszcb的博客 3165

Rockit VDEC解码实战:从零构建高效视频处理流水线

本文详细介绍了Rockit VDEC硬件解码模块在RK3568/RK3588平台的应用实践,涵盖开发环境配置、MPI接口使用、码流发送模式选择、内存管理优化及多路解码系统构建。通过实战案例展示如何利用VDEC实现高效视频处理流水线,显著降低CPU占用率,提升嵌入式多媒体开发效率。

ol789012的博客 305

java运行速度慢的原因

         1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作.而C++编译的时候将程序编译成本地机器码.一般来说java程序执行速度要比C++慢10-30倍.即使采用just-in-time compiling (读取类文件字节后,编译成本地机器码)技术,速度也要比C++慢好多.       2)java

码农之道 4023

用 deepseek 写小说(通用版提示词模板)

#Initialization:作为[Role],在[Goals]下,回顾你的[Skill],严格遵守[Constraints],5.第五步:人物大纲,给小说里的每个人物撰写背景故事,深挖人物过去的经历,原生家庭,住所:一栋位于市郊的房子,有三个卧室,房龄 10 年,厨房很大,当中有一个鸟式大理石。示例 2.戈德里洛克先去了熊老爹的工作坊,尝试用大纲法写作,却发现这种方法无聊透顶,1.第一步:一句话概括,一句话概述小说内容,主要包含小说癸型,主角,以及故事中需要。大灰狼的暴行彻底激怒了戈德里洛克,

陈奕昆的博客 2973

java提高性能_java性能优化:35个小细节,让你提升java代码的运行效率

前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可...

weixin_39765057的博客 725

10、边缘智能学习技术解析

本文深入解析了边缘智能学习技术的四大核心方法:联邦学习、DNN拆分、迁移学习和八卦学习。文章从人类大脑的学习机制出发,引出边缘级智能的重要性,并详细阐述各类技术的架构、优势、挑战及适用场景。通过对比分析,展示了不同技术在隐私性、效率、可扩展性等方面的特性,并探讨了未来融合多种技术、软硬件协同优化及应用领域拓展的发展趋势,为边缘智能在物联网与人工智能领域的应用提供了系统性参考。

ppp33的博客 117

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 375

java请求参数防修改_JAVA里面方法调用时传对象参数的陷阱的防止

类似的问题,又被人问到了几次,决定还是简单总结一下吧。这个问题,一些老手已经很清楚了,但有时也会很不小心的被XX了一把。其实问题的核心,就是参数虽然是传的引用,但参数就是参数,他自身是一个本地的局部引用而已,只不过在这个时刻和调用者指向了同一个对象。但并不代表这个局部引用在整个方法调用期间内能始终和调用者保持一致。下面是2个测试,分别测试可修改的Object和不可修改的/*** JAVA里面对象参...

weixin_35387118的博客 767

【EDA Tools】Spyglass 检查 Verilog 和 SystemVerilog 混合语言及 Lint 检查

Spyglass可以用于检查混合设计中的语言互操作性和一致性问题。对于设计中包含多种硬件描述语言的情况,Spyglass 能够识别并解析其中的模块及其互连,并对其进行验证。例如,在包含 Verilog 和 VHDL 的混合设计中,Spyglass 会自动识别并解析 Verilog 和 VHDL 文件及其相互连接。通过运行 Spyglass Lint 功能,可以检查混合设计中的语言一致性问题,例如不兼容的数据类型、互操作性问题以及其他可能导致设计故障或不一致的问题。

记录学习历程 5082

java对象作为参数解析_Java学习者须知:解析JAVA里面方法调用时传对象参数的陷阱...

类似的问题,又被人问到了几次,决定还是简单总结一下吧。这个问题,一些老手已经很清楚了,但有时也会很不小心的被XX了一把。其实问题的核心,就是参数虽然是传的引用,但参数就是参数,他自身是一个本地的局部引用而已,只不过在这个时刻和调用者指向了同一个对象。但并不代表这个局部引用在整个方法调用期间内能始终和调用者保持一致。下面是2个测试,分别测试可修改的Object和不可修改的/*** java里面对象参...

weixin_33668386的博客 170

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java中的形参和实参的区别以及传值调用和传引用调用

1.名词解析: 1.形参:用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。 2.实参:传递给被调用方法的值,预先创建并赋予确定值。 3.传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。 4.传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变都发...

以终为始 1251

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java调用方法参数究竟是传值还是传址?

之前阅读《Head First Java》的时候,记得里面有提到过,Java在调用方法,传递参数的时候,采用的是pass-by-copy的方法,传递一份内容的拷贝,即传值。举一个最简单的例子: 1 public class Test { 2 public static void main(String[] args) { 3 int numberA = 1;...

weixin_30552811的博客 351

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

紧急避坑指南,Java反射调用private方法的5大陷阱与应对策略

掌握Java反射获取私有方法并调用的正确方式,避开常见陷阱。涵盖setAccessible、安全检查、泛型擦除等5大难点,适用于单元测试与框架开发。提升代码灵活性与调试效率,值得收藏。

FuncLens的博客 920

java中要注意对象作为参数引用返回时,对象本身是否变化了

因为对象参数往往是引用传参形式,所以很多时候,我们往往会通过调用一个函数,然后直接想当然的认为该值已经发生变化,然而,情况并非如此,这得需要看看方法里到底做了些什么,请看下边这个例子: private Instances SortInterestScore(Instances ins) throws Exception {        ....................

u010968153的专栏 4160

Unidbg模拟JNI调用时参数传递的继承链陷阱

本文深入探讨了Unidbg模拟JNI调用时参数传递中的继承链陷阱问题。通过分析JNI调用的底层机制和典型错误场景,提供了建立完整类继承关系和正确处理接口实现的解决方案,帮助开发者避免常见的参数传递错误,确保JNI调用的正确性和稳定性。

weixin_42552410的博客 146

PHP调用Python时的参数校验陷阱(90%开发者忽略的关键细节)

解决PHP调用Python时的参数校验难题,避免类型错误与安全漏洞。涵盖Web接口、命令行交互等场景,通过JSON传递与正则验证确保数据合规,提升系统稳定性。掌握这一关键细节,90%开发者忽略的坑你也能避开,值得收藏。

VarChat的博客 804

Java重载方法参数匹配陷阱与解决方案

方法重载是Java语言的核心特性之一,它允许开发者通过参数列表的差异实现同名方法的多态调用。其底层原理遵循JLS规范定义的严格匹配优先级,包括精确匹配、类型转换、装箱拆箱等机制。在实际工程中,不恰当的重载使用可能导致严重的业务逻辑漏洞,如支付校验绕过、日期精度丢失等问题。通过编译时检测策略(如@Override注解、IDE静态检查)和运行时防护方案(参数断言、防御性日志),可以有效规避这类风险。特别是在金融支付、交易风控等高并发场景下,合理的重载设计能显著提升系统稳定性。本文结合电商支付校验失效等典型案例,

weixin_34072296的博客 281

深入讲解Python函数中参数的使用及默认参数的陷阱

这篇文章主要介绍了Python函数中参数的使用及默认参数的陷阱,文中将函数的参数分为必选参数、默认参数、可变参数和关键字参数来讲,要的朋友可以参考下 C++里函数可以设置缺省参数,Java不可以,只能通过重载的方式来实现,python里也可以设置默认参数,最大的好处就是降低函数难度,函数的定义只有一个,并且python是动态语言,在同一名称空间里不能有想多名称的函数,如果出现了,那么后出现的会覆盖...

python函数学习教程 2774

27、面向对象的陷阱

1、instanceof运算符的陷阱

YGingko的专栏 564

java就近调用原则_Java面试关于方法调用之就近原则陷阱

package demo1;先上代码。import java.util.ArrayList;import java.util.List;package demo1;import java.util.ArrayList;import java.util.List;public class Test01 {public static void main(String[] args){run(null)...

weixin_34274163的博客 747
上一篇: 今天收到优快云 2009年英雄会的邀请函
下一篇: Thread.yield的中文API文档引起的一个误解
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值