Java的很多基础知识是你必须要打牢的。吧里的吧友不要一知半解 要彻底弄清楚。
例如这个同学的这个问题:

这个就是典型的Java的传递类型问题。
那么今天就把JAVA的传递类型讲的清清楚楚。
结论:
Java中只有值传递
前驱知识:
1: 理解方法(函数)的特性
方法(或函数)作为编程中的基本单元,用于执行定义明确的任务 例如:swap
2: 数学中的函数与编程方法的类比
函数 f1 -> f(y) = x(函数体)
调用者或使用者 只关心结果y 和 x(参数) 它并不关系函数体是什么
但重点是保证 特别是其无副作用和确定性(相同输入产生相同输出)。
3: 计算机设计中的函数(方法)
那么问题来了 如果你是计算机的设计者 你怎么保证无副作用和 确定性?
那是不是要解决 如果A 调用 f1 B 调用f1 它们是完全隔离的
不会A 传递x ,对B也是一样起效果。 ( 一定要思考 这里就是理解的重点)
计算机的解决 : 计算机是通过创建独立的函数栈和栈空间来为每次方法调用提供隔离的执行环境。每次方法调用时,参数被复制到 新的栈帧中,确保了内部操作仅限于该栈帧,不会影响到调用者环境。
证明:
public void swap(TreeNode left (L1), TreeNode right(R1)) 和调用代码 swap(root.left ( L ),root.right (R) );的分析。
L ,L1 ,R ,R1 是完全不一样的四个变量 有各种的函数栈 。就像四个盒子 只不过它们里面装的物品是一样的。
那么你调用了 public void swap(TreeNode left (L1), TreeNode right(R1))
计算机会怎么处理?
new L1 ,new R1 。赋值引用 R1 = R.引用 , L1 = L.引用 (注意这里知识地址值 不是传递进来的对象)
例如这个同学的这个问题:

这个就是典型的Java的传递类型问题。
那么今天就把JAVA的传递类型讲的清清楚楚。
结论:
Java中只有值传递
前驱知识:
1: 理解方法(函数)的特性
方法(或函数)作为编程中的基本单元,用于执行定义明确的任务 例如:swap
2: 数学中的函数与编程方法的类比
函数 f1 -> f(y) = x(函数体)
调用者或使用者 只关心结果y 和 x(参数) 它并不关系函数体是什么
但重点是保证 特别是其无副作用和确定性(相同输入产生相同输出)。
3: 计算机设计中的函数(方法)
那么问题来了 如果你是计算机的设计者 你怎么保证无副作用和 确定性?
那是不是要解决 如果A 调用 f1 B 调用f1 它们是完全隔离的
不会A 传递x ,对B也是一样起效果。 ( 一定要思考 这里就是理解的重点)
计算机的解决 : 计算机是通过创建独立的函数栈和栈空间来为每次方法调用提供隔离的执行环境。每次方法调用时,参数被复制到 新的栈帧中,确保了内部操作仅限于该栈帧,不会影响到调用者环境。
证明:
public void swap(TreeNode left (L1), TreeNode right(R1)) 和调用代码 swap(root.left ( L ),root.right (R) );的分析。
L ,L1 ,R ,R1 是完全不一样的四个变量 有各种的函数栈 。就像四个盒子 只不过它们里面装的物品是一样的。
那么你调用了 public void swap(TreeNode left (L1), TreeNode right(R1))
计算机会怎么处理?
new L1 ,new R1 。赋值引用 R1 = R.引用 , L1 = L.引用 (注意这里知识地址值 不是传递进来的对象)










