Java对象作为方法参数传递

Cursor锁机了怎么办?实测这个开源插件帮你无限“续杯”,附详细安装与防踩坑指南 本文提供了Cursor锁机问题的详细解决方案,包括使用开源插件`cursor-fake-machine`修改机器标识、锁定配置文件权限以及优化使用规范。同时介绍了如何利用Cursor开发油猴脚本将微信公众号文章高效转换为Markdown格式,提升内容创作效率。 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

前言

上周在写一段代码的时候出现了一个让我汗颜的bug,给大家看下示例代码,原业务代码就不贴了,反正是一个意思。

//eg1
public class ArrayListDemo {

    public static void testObject(DoubleDemo doubleDemo){
        DoubleDemo doubleDemo1 = new DoubleDemo();
        doubleDemo1.setName("testObject1");
        doubleDemo = doubleDemo1;①
    }
    
    public static void main(String[] args) {
        DoubleDemo doubleDemo = new DoubleDemo(); 
        doubleDemo.setName("main");
        testObject(doubleDemo);②
        System.out.println(doubleDemo.getName());//main

    } 
}

原本我以为会输出testObject1,但是却没如我愿,为什么会出现这种结果呢?

值传递和引用传递

Java中的基本数据类型的方法传参都是值传递,在方法内部对变量进行修改,不会改变方法之外的变量的值。

	//eg2
	 public static void testObject(int i){
	      i = 20;
	    }

    public static void main(String[] args) {
        int i=10;
        System.out.println(i);//10


    }

Java引用类型的方法传参是引用传递,在方法内部通过引用修改对象的值,会真正的改变堆中对象的值。

	//eg3
	public static void testObject(DoubleDemo doubleDemo){
	        doubleDemo.setName("testObject");
	    }

    public static void main(String[] args) {
        DoubleDemo doubleDemo = new DoubleDemo();
        doubleDemo.setName("main");
        testObject(doubleDemo);
        System.out.println(doubleDemo.getName());//testObject

    }

而回到最上方的例子,在testObject方法里,对doubleDemo这个对象的处理是不同的,一个是在方法里通过set方法改变了参数对象的值,返回主函数里,对象的值改变的里;一个是在方法里将另一个引用赋值给了doubleDemo,返回主函数里doubleDemo还是指向原来的对象。这是因为在局部方法内部的赋值只是在局部方法内生效,回到调用函数中doubleDemo还是指向原来的内存地址;而如果是直接通过set方法改变属性是直接改变堆中对象的值。
所以在日常开发中,如果需要把对象通过调用一个方法改变其对象的属性值,有两种方式:
1.在方法内部使用set方法直接改变对象的属性值。
2.在方法内部通过=赋值,但是要把在调用方法内接收该对象,即局部方法应该是有返回值的。

public class ArrayListDemo {
	//eg4
    public static DoubleDemo testObject(DoubleDemo doubleDemo){
        DoubleDemo doubleDemo1 = new DoubleDemo();
        doubleDemo1.setName("testObject1");
        doubleDemo = doubleDemo1;
        return doubleDemo;
    }
    
    public static void main(String[] args) {
        DoubleDemo doubleDemo = new DoubleDemo();
        doubleDemo.setName("main");
        //将局部方法里的结果在主函数中再做一次赋值
        doubleDemo = testObject(doubleDemo);
        System.out.println(doubleDemo.getName());//testObject1

    } 
}

我们来debug一下eg1中的代码,就是文章最开始的那个例子,当执行到①位置时,可以看到doubleDemo变为蓝色(局部变量),name的属性变为testObject1在这里插入图片描述
继续往下执行到②,看到doubleDemo的name属性变为了main。
在这里插入图片描述

MMSegmentation 安装教程,避免mmcv不合适版本,及相关问题解决 都行,不做要求。 阅读详情

相关推荐

Windows Server双机热备实战:用IIS+ARR+NLB搭建高可用Web服务(附避坑指南)

本文详细介绍了在Windows Server环境下,利用IIS、ARR(Application Request Routing)和NLB(Network Load Balancing)构建高可用Web服务的实战方案。通过双机热备架构,实现从网络层到应用层的全面冗余与智能流量分发,并提供了关键的配置步骤、常见避坑指南及性能调优建议,确保企业级Web服务的连续性与可靠性。

weixin_29210759的博客 382

java中对象作为参数_对象作为Java中的参数

在Java中,将原始类型传递给方法时,可以通过按值调用来完成。通过引用调用隐式传递对象。这意味着当我们将原始数据类型传递给方法时,它将仅将值传递给函数参数,因此对参数所做的任何更改都不会影响实际参数的值。Java中的对象是引用变量,因此对于对象,将传递作为对象引用的值。因此,不传递整个对象,而是传递其引用的对象。方法中对对象的所有修改都会修改堆中的对象。在函数中传递对象作为参数classAdd{...

weixin_39640762的博客 2307

生信实战:用bcftools玩转VCF文件处理(从压缩到注释全流程)

本文详细介绍了使用bcftools处理VCF文件的全流程实战指南。从数据准备、压缩索引、信息提取、质量统计到核心的变异过滤与功能注释,手把手教你高效管理基因组变异数据。重点阐述了如何利用bcftools进行VCF文件注释,整合外部数据库信息,为变异位点添加关键的生物学标签,是生物信息学数据分析的必备技能。

rgv23456789的博客 340

java 对象作为参数的解析

此文章帮助初学者区分参数的值传递和引用传递 java 和C区别之处在于缺少指针概念,C可以通过指针标志内存区域的首地址,指针作为参数实际指明变量的存储内存块; 1)java 中基础类型作为参数:int ,double和C语言的值传递一样,只是传入了变量值的复制,做任何修改不会改变原始值; 2)java 中对象作为参数,传递的都是对象的引用(可以理解为指针概念,实际操作的都是内存中原始对象的成...

mychinasty的博客 3003

TwinCAT3 实时核异步通信:基于ADS的C++ Server/Client数据交换实战解析

本文深入解析了在TwinCAT3实时核中,如何利用ADS协议实现C++ Server与Client之间的异步数据交换。文章从核心概念入手,详细阐述了实时核、ADS通信及异步机制,并通过实战步骤指导环境搭建、路由配置、Server端服务创建与Client端请求发起,重点剖析了Req/Ind/Res/Con异步回调模型,旨在帮助开发者构建高效、非阻塞的实时工业控制应用。

purple的博客 467

JS逆向-B站评论数据w_rid参数和wts参数

本文是该专栏的第69篇,后面会持续分享python爬虫干货知识。本文以B站的评论数据为例,通过JS逆向获取其中的w_rid参数以及wts参数生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 2048

Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C#中可以通过传引用或传输出参数来改变传入...

了解➔熟悉➔掌握➔精通 3万+

SAP Clean Core 对传统 ABAP 开发人员来说意味着什么:机遇和挑战

SAP Clean Core是一种战略方法,旨在优化和现代化 SAP S/4HANA 系统,通过尽量减少定制,确保核心系统的稳定性、高效性和对云环境的兼容性。Clean Core 作为一种设计思路,致力于让 ERP 系统的核心功能保持简洁、规范,避免不必要的复杂化,最终维持一个标准化的核心,使系统更容易升级、性能更优越,同时支持快速的创新能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 609

Java异常

     一个程序猿代码质量的好坏不是看你使用了什么样的设计模式,多么高深的技术点,常常对于程序中异常的处理,可以很好的反应你是不是个老手。Java是面向对象的语言,对于程序中可能会出现的“意外”,肯定也是会有一个意外对象来告知,关于异常常涉及到三个类Throwable Exception Error 类 Throwable位于这一类层次的最顶层,只有它的后代才可以做为一个例外被抛弃 java.l...

浪子huang 329

基于物联网技术设计的微型消防小车控制系统(STM32+ESP8266局域网)(181)

基于物联网技术的小微型消防车控制系统。通过远程控制功能,用户能够灵活操作消防车的行驶,方便快速抵达火灾现场。环境感知功能实时采集烟雾浓度、温湿度信息,为灭火决策提供科学依据。火源定位功能采用自动和手动两种模式,准确迅速地定位火源,并通过报警提示用户。灭火功能则根据火源定位结果,自动或手动启动干粉灭火器进行高效灭火。这些功能的结合实现了对小型火灾的全面应对,提升了消防效率与安全性,减少了火灾带来的损失。通过本项目的设计与实现,为消防领域提供了一种创新且实用的解决方案。

3079

YOLOv11 模型改进:利用新型损失函数实现精度跃升(含代码全解析)

在目标检测领域,损失函数的选择直接决定模型的精度上限。某自动驾驶公司将 YOLOv11 原有损失替换为新型损失后,障碍物检测 mAP 提升 10%,夜间场景误检率降低 22%;某物流分拣项目中,采用新损失的 YOLOv11 模型对小包裹的识别准确率从 82% 升至 96%。如果你也在为模型精度瓶颈、样本不平衡问题困扰,这篇教程将带你掌握 YOLOv11 损失函数的进阶技巧,真正帮你在检测性能上实现突破。损失函数是模型训练的“指南针”,它定义了模型“学习的方向”。传统损失(如 BCE、Focal Loss)在

m0_71589036的博客 713

8.2_[Java 方法]-深入带参 数组/对象 作为参数的方法以及 值传递/引用传递 的区别

数组作为参数的方法 定义数组参数的方法与调用 数组参数方法的示例程序 对象作为参数的方法 当数组太多而数组参数不切实际就需要对象参数这种东西 分段解释对象作为数组方法的程序代码 先运行研究一下演示代码再看后面的分段解释 声明公开成员属性 声明对象数组 声明定义调用对象参数方法 初始化单个对象的值 将单个对象存储进对象数组达到暂时保存的目的 值传递跟引用传递有什么区别 基本类型与引用类型 如何在对象数组中存储不同对象的值 循环录入被赋值的对象......

燃吹 U 客帮 1120

2024年游戏策划最新面试题及答案

1. **游戏策划**:负责游戏设计和开发的创意和技术过程。2. **主要职责**:设计游戏玩法、故事、角色、世界等。4. **游戏机制**:定义玩家如何与游戏世界互动的规则。13. **引人入胜的角色**:深入的背景故事、个性特征。3. **游戏平衡**:确保游戏公平、有趣且具有挑战性。7. **RPG特点**:角色发展、故事驱动、玩家选择。12. **关卡设计技巧**:挑战性、流动性、视觉引导。11. **游戏关卡设计**:创建游戏世界的不同阶段。5. **游戏循环**:玩家在游戏中重复的行为模式。

guo162308的博客 2319

java 对象作为方法参数传递到一个方法后,对象内容发生改变的相关分析

java 对象作为方法参数传递到一个方法后,对象内容发生改变的相关分析

快乐的小三菊的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java对象作为方法参数传递到一个方法后,对象内容是否发生改变的相关分析

java方法接收一个对象,修改该对象是否影响调用方

MariaOzawa的博客 7618

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

关于java对象作为方法参数传递到一个方法后,对象内容是否发生改变的相关分析

问:当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。在java语言中只有值传递参数;当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但是对象的引用(不是引用的副本)是永远不会改变的。 Java参数:不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,传值一般相对于传地址而言) 若...

xiaolegeaizy的博客 2823

pscad IEEE标准系统搭建说明

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

java 方法的参数传递之引用对象

​public class Test7 { public static void swap(DataSwap ds1) { ds1.a=6; System.out.println("在swap方法中ds1.a的值:"+ds1.a); } public static void main(String[] args) { // TODO Auto-generated method...

qq_39125232的博客 474

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

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

weixin_44966968的博客 1831

java中对象作为参数传递给一个方法,到底是值传递,还是引用传递

看完绝对清晰~ java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型  值传递;引用类型,地址值传递,所以叫值传递。     当主函数的变量,对象(主本)传递到副函数时,传递的变量、对象(方法中的形参)其实都是副本,而副本的改变不会影响主  本。 基本类型:传递的是值的拷贝,也就是说传递后就互不相关了,也就是说,不过副函数的副本如何...

Uncle Wang的专栏 1万+

Java中变量的分类、构造方法、方法的重载、对象与引用、参数传递

(1)如果某类方法出现了方法重载的现象,当调用该类方法时,编译器会查看调用方法时使用的参数数量、参数顺序和参数类型,然后与类中定义的重载方法进行匹配,找到参数匹配的重载方法进行调用。(1)基本数据类型,整数型的默认值是0,浮点型的默认值是0.0,布尔型的默认值是false,字符型的默认值是‘\u0000’(空字符,NUL字符,null字符)(3)特点:由于实参和形参指向的是同一地址,在方法执行中对形参的操作实际上就是对实参的操作,操作结果会在方法结束后被保留下来,所以。,编译器会自动生成一个无参构造方法。

Watermelon_Mr的博客 1169

java基础之面向对象的封装性、构造方法及参数传递

构造方法又被称为构造函数 / 构造器 / constructor构造方法语法结构:[修饰符列表] 构造方法名 (形式参数列表){构造方法体;回顾普通方法的语法结构:[修饰符列表] 返回值类型 方法名(形式参数列表){方法体对于构造方法来说,返回值类型不需要指定,并且也不能写void。只要写上void,那么这个方法就成为了普通方法构造方法的方法名必须和类名保持一致构造方法的作用?构造方法存在的意义是,通过构造方法的调用,可以创建对象。new 构造方法名(实参列表)

蔓嘉的博客 370

java 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

但是,当对象作为参数传递时,实际上传递的是对象的引用值。因此,方法内部可以通过这个引用修改对象的属性,这些修改在方法外部也是可见的。当基本数据类型(如int, double, char等)作为参数传递时,它们的值会被复制,所以方法内部对参数的任何修改都不会影响到原始的变量。尽管传递的是值(对象的引用),但方法内部可以通过这个引用来修改对象的属性。总的来说,虽然Java中只有值传递,但当对象作为参数传递时,方法的行为看起来就像是引用传递,因为我们可以通过传递的引用修改对象的状态。在Java中,参数传递都是。

zz_ll9023的博客 669

java对象作为参数解析_关于java对象作为方法参数传递到一个方法后,对象内容是否发生改变的相关分析...

问:当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并返回变化后的结果,那么这里到底是值传递还是引用传递?答:是值传递。在java语言中只有值传递参数;当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但是对象的引用(不是引用的副本)是永远不会改变的。Java参数:不管是原始类型还是引用类型,传递的都...

weixin_28744573的博客 259

java基础(类,对象,引用,内存,方法,参数传递,this关键字)

java基础1 OOP2 类3 对象4 引用5 内存6 方法7 参数传递 1 OOP OOP,编写对象编程 OOP(object oriented programming),面向对象编程 把构成问题的各种事物,抽象成各个对象,这些对象具有解决问题的行为(方法),同时对象还可以具有解决很多类似问题的行为(方法),而不只是能解决一个问题。 POP(procedure oriented Programming),面向过程编程 分析出,解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,然后依次调用就

CodeSheep1的博客 479

java 传对象改变的是_关于java对象作为方法参数传递到一个方法后,对象内容是否发生改变的相关分析...

问:当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并返回变化后的结果,那么这里到底是值传递还是引用传递?答:是值传递。在java语言中只有值传递参数;当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但是对象的引用(不是引用的副本)是永远不会改变的。Java参数:不管是原始类型还是引用类型,传递的都...

weixin_36483301的博客 521

java8 通过方法引用 vo::setLevel将对象的 setter 方法作为参数传递

【代码】java8 通过方法引用 vo::setLevel将对象的 setter 方法作为参数传递。

weixin_43833540的博客 180
上一篇: Java常用类:System
下一篇: Java常用类:ArrayList类详解
明天就不写java了
博客等级 码龄9年 18粉丝 43原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值