java值传递和增强for循环问题
2023-02-15 14:59:17
Java是值传递
首先要理解 Java是值传递问题
正确理解:
- java 中只有值传递没有引用传递。
- 对于基本数据类型传递的就是栈区中的值。
- 对于引用类型传递的也是栈区值只不过值是一个地址。
基本数据类型和引用数据类型
内存划分方式不同
-基本数据类型:值存储在栈区域
-byte short int long float double char boolean
-引用数据类型:值存储在堆区域
-class interface 数组
引用数据类型在栈区存储的值为对应堆空间的地址
形参与实参
形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。
实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。
实际参数是调用有参方法的时候真正传递的内容,而形式参数是用于接收实参内容的参数。
值传递和引用传递
值传递的特征——修改传递过来的值,并不会影响原来的对象
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
值传递和引用传递的区别是 实参到底有没有被复制一份给形参。
for each循环改数组元素值问题
for(元素类型 元素变量i : 遍历对象obj){ xxxxxx; }
元素变量 i 是一个局部变量,它是引用数组当前元素的副本(类似复制一份)
使用for each循环更改数组元素时,出现了未能成功改值问题
自定义Person类,有name(String)和age(int)两个属性。
1 | int[] nums = { 1, 2, 3, 4, 5 }; |
接下来
修改 int数组代表的基本数据类型的数组
1 | for (int i : nums) { |
1 | //相当于: |
修改用String类和Person类代表引用数据类型的数组
对于String类
1 | for (String string : strs) { |
1 | //相当于 |
对于Person类
1 | for (Person person : persons) { |
但Java仍为值传递,对于对象参数,值的内容是对象的引用。
对于引用类型传递的也是栈区值,只不过值是一个地址。
1 | //相当于 |
证:通过调试(调试信息)
1 | persons ={Person[3]@500} |
2023-02-15 14:59:17