Java中的参数传递都是值传递,没有引用传递
值传递的概念:值传递会为所传递的对象重新开辟一块空间,于是对所传对象的操作不会影响到原来的对象。
如果传递的是基本数据类型和String类型的变量,在传入到函数的时候,会重新开辟一段空间
如果传递的是引用数据类型的变量,在传入该引用变量(引用作为指向该地址的一个变量,存储的是指向该对象的地址,这个变量其实也是一个值,所以也是值传递)的时候,如果是在该方法空间中指向一块新的地址,则改变不会反应到原先的对象上,如果没有,则在方法空间中修改。会反映到原先的对象上。
1、在实际的使用过程中,我们不必纠结那么多,原生数据类型和String,在传入函数的时候,不管函数里面做什么,他的值都不会被修改。引用类型传递到函数中,只要函数中不是让参数指向一个新建的对象,那么函数中的修改会反映到此引用类型上。
2、平时的处理上,可以把String和原生数据类型放在同一类的情况下使用,因为Java内部使用了很多的机制,让String看起来跟原生数据类型一样。但是String归根结底是一个引用类型,如在进行比较时,其他原生数据类型可以使用==,而String必须使用equals方法才能比较其内部的值(这点C#做的非常好,直接使用==,不让程序员过分的了解底层,我在做C#编程的过程中,甚至从来都没有觉得string和值类型有什么不同)。
3、Java确实是只能传值,不能传引用。所谓传引用,只在C、C++的传指针和C#的ref中存在。