首页 > 奇闻 > 正文内容

如何在Java Python JavaScript修改函数参数的值?

奇闻2025-05-19 11:19:07

你是不是遇到过这种情况——在函数里修改了参数值,结果发现外面的变量根本没变?尤其是刚接触编程的新手,可能一边抓头发一边想:这代码怎么不按套路出牌啊!咱们今天就掰开了揉碎了说,用大白话讲明白这三个常用语言里的参数修改门道。

(小标题)??Java:倔强的值传递选手??
Java的参数传递简单来说就是:??基本类型传的是复印件,对象类型传的是原件地址??。举个例子,你给朋友发微信文档,要是发PDF(基本类型),他改得再狠也不会影响你手机里的文件;要是发在线文档链接(对象类型),他改的内容你也能实时看到。

咱们看个例子:

java复制
// 基本类型修改失败案例
public static void changeNum(int num) {
    num = 20; 
}
int myNum = 10;
changeNum(myNum);
System.out.println(myNum); // 还是10

这时候你可能会急得拍桌子:我都赋值20了怎么还是10?别急,用对象包装试试:

java复制
class ValueHolder { int value; }

public static void changeObj(ValueHolder holder) {
    holder.value = 20; 
}
ValueHolder holder = new ValueHolder();
holder.value = 10;
changeObj(holder);
System.out.println(holder.value); // 成功变成20

(小标题)??Python:灵活的可变对象玩家??
Python的参数传递像是个魔术师:??传的都是引用,但能不能改要看对象本身能不能变??。比如数字、字符串这些不可变对象,就像石头刻的字改不动;列表、字典这些可变对象,就像白板写字随便擦改。

看这个典型翻车现场:

python复制
def change_num(n):
    n += 10
x = 5
change_num(x)
print(x)  # 还是5

但换成列表就完全不一样了:

python复制
def change_list(lst):
    lst.append(666)
my_list = [1,2,3]
change_list(my_list)
print(my_list)  # 变成[1,2,3,666]

(小标题)??JavaScript:让人又爱又恨的传值怪咖??
JS的参数传递机制常常让新人怀疑人生:??基本类型传值,对象传引用??。但有个坑爹的地方——就算传对象引用,如果直接替换整个对象,外面的变量还是不会变。

看看这个经典案例:

javascript复制
function changeObj(obj) {
    obj = {name: '李四'} // 直接换对象
}
let person = {name: '张三'}
changeObj(person)
console.log(person.name) // 还是张三

想要真的修改成功得这样操作:

javascript复制
function changeProp(obj) {
    obj.name = '王五' // 改属性
}
changeProp(person)
console.log(person.name) // 变成王五

(问答环节)??Q:为什么有时候改得动参数,有时候改不动???
A:关键看两点:1. 参数是基本类型还是对象类型;2. 你修改的是整个参数还是参数的某个属性。就像租房时,房东给你钥匙(对象引用)后,你在屋里重新装修(改属性)房东看得见,但要是把房子推倒重建(替换整个对象),房东可不认账。

(对比表格)三种语言参数修改对比:

操作JavaPythonJavaScript
改基本类型参数需要对象包装无法直接修改无法直接修改
改对象属性直接生效直接生效直接生效
替换整个对象不影响原对象不影响原对象不影响原对象

小编观点:参数修改这个知识点就像学骑自行车,刚开始总摔跟头,但一旦开窍了就发现规律其实很简单。记住三个关键词——??值传递、引用传递、可变性??,多写几个例子亲手试试,比看十篇教程都管用。编程路上哪有不踩坑的,这些坑踩明白了,后面学啥都顺溜!

搜索