在Java里方法参数如何传递_Java值传递机制说明
发布时间 - 2026-01-26 00:00:00 点击率:次Java中所有方法参数都是值传递,基本类型传值副本,对象类型传引用副本;修改对象属性会影响原对象,但重新赋值形参引用则不会;String等不可变类因创建新对象而看似被修改。
Java中所有方法参数都是值传递,没有引用传递。所谓“值传递”,是指方法接收的是实参的副本,而不是实参本身;即使传入的是对象,传递的也只是对象引用的副本,而非引用本身。
基本类型参数:传递真实值的拷贝
对于 int、double、boolean 等基本类型,方法接收到的是该变量值的一个完全独立副本。修改形参不会影响原始变量。
例如:
int a = 10;
change(a);
System.out.println(a); // 输出仍是 10
void change(int x) { x = 20; }
这里 x 是 a 的副本,x 的修改与 a 无关。
对象类型参数:传递引用的副本
当传入一个对象(如 String、ArrayList、自定义类实例)时,实际上传递的是该对象引用(即内存地址)的一个副本。这个副本和原引用指向同一个堆内存中的对象。
因此,在方法内通过该引用修改对象的属性(比如 list.add()、obj.name = "new"),会影响原对象;但若在方法内让形参引用指向新对象(如 obj = new Person()),则不会改变原始引用所指的对象。
例如:
Person p = new Person("Alice");
modify(p);
System.out.println(p.name); // 输出 "Bob"
void modify(Person person) {
person.name = "Bob"; // ✅ 修改对象内容,生
person = new Person("Charlie"); // ❌ 只改变副本引用,不影响 p
}
String 和包装类是特例:不可变性掩盖了值传递本质
String、Integer、Double 等是不可变类(immutable)。它们看似“被修改”,其实是创建了新对象并让引用指向它。由于传入的是引用副本,方法内重新赋值对原引用无影响。
例如:
String s = "hello";
changeStr(s);
System.out.println(s); // 输出 "hello",不是 "world"
void changeStr(String str) {
str = "world"; // 创建新字符串,str 指向新对象,原 s 不变
}
想真正实现“引用传递效果”?靠返回值或包装容器
Java 无法直接修改传入的引用本身,但可通过以下方式间接达成目的:
- 方法返回新对象,由调用方重新赋值: s = changeStr(s);
- 传入可变容器(如 AtomicInteger、StringBuilder、List、自定义包装类)来承载数据
- 将多个相关值封装进一个对象,传对象引用并在内部修改其字段
这些做法不改变 Java 的值传递本质,而是利用对象可变性或显式赋值来达到预期效果。
# java
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
如何在阿里云部署织梦网站?
如何快速生成凡客建站的专业级图册?
java中使用zxing批量生成二维码立牌
Laravel如何配置任务调度?(Cron Job示例)
如何用wdcp快速搭建高效网站?
微信小程序 canvas开发实例及注意事项
如何破解联通资金短缺导致的基站建设难题?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel如何使用Blade组件和插槽?(Component代码示例)
Python面向对象测试方法_mock解析【教程】
如何选择可靠的免备案建站服务器?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
个人网站制作流程图片大全,个人网站如何注销?
如何用花生壳三步快速搭建专属网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
音乐网站服务器如何优化API响应速度?
网页设计与网站制作内容,怎样注册网站?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel如何自定义错误页面(404, 500)?(代码示例)
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在万网利用已有域名快速建站?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
用yum安装MySQLdb模块的步骤方法
详解MySQL数据库的安装与密码配置
javascript基于原型链的继承及call和apply函数用法分析
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何快速选择适合个人网站的云服务器配置?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
如何快速查询域名建站关键信息?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
如何在橙子建站上传落地页?操作指南详解
中山网站推广排名,中山信息港登录入口?
高端建站如何打造兼具美学与转化的品牌官网?
详解Android图表 MPAndroidChart折线图
javascript如何操作浏览器历史记录_怎样实现无刷新导航
EditPlus中的正则表达式实战(6)
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Java遍历集合的三种方式
如何批量查询域名的建站时间记录?
制作旅游网站html,怎样注册旅游网站?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
如何在阿里云域名上完成建站全流程?
文字头像制作网站推荐软件,醒图能自动配文字吗?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南

