在JAVA里面,对于方法的参数传递,不管是原生数据类型还是引用类型,一律是传值:pass by value
只是在传递原生数据时,值是具体的值,而传递引用类型时,值是这个引用对象的地址。
java 代码
- package com.test;
- public class ParamTest {
- public void changeInt(int a)
- {
- a = 3;
- }
- public void changePoint(Point point)
- {
- //此处将改变引用对象内存地址参数对应的对象的地址中的值
- point.x = 5;
- point.y = 6;
- }
- public void changeString(String str)
- {
- //String类型是个不可改变的final类型,此时,参数str将指向新的String pool中值为"abc"的对象,因此,原来的实参str的所指向的内存地址中的值并未被改变
- str = "abc";
- }
- public static void main(String[] args)
- {
- int a = 1;
- ParamTest pt = new ParamTest();
- //传递的是原生数据(其值是原生数据的数据“1”,而不是原生数据的地址)
- pt.changeInt(a);
- System.out.println(a);//1
- Point point = new Point(1,2);
- ParamTest pt2 = new ParamTest();
- //传递的是引用类型(其值是对象的内存地址)
- pt2.changePoint(point);
- System.out.println(point.x);//5
- System.out.println(point.y);//6
- String str = "xyz";
- ParamTest pt3 = new ParamTest();
- //传递的是引用类型(其值是String pool中值为"xyz"的对象的内存地址)
- pt3.changeString(str);
- System.out.println(str);//xyz
- }
- }
- class Point
- {
- int x;
- int y;
- public Point(int x,int y)
- {
- this.x = x;
- this.y = y;
- }
- }