java的函数参数传递
参数传递
java是:值传递(直接复制一个副本)
- 对于基础数据类型,直接复制新的对应基础类型数据。
- 对于引用类型,复制的是对象的引用。在不改变对象引用的情况下改变形参的成员变量数据,会影响到实际参数的变化。
实验
package com.company;
class User
{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
// write your code here
User olduser = new User();
olduser.setName("test information");
olduser.setAge(0);
if(true) {
ana_param(olduser);
// Name:new obj change age:100
// Name:test information age:0
}else {
ana_param_2(olduser);
// Name:not new obj age:200
// Name:not new obj age:200
}
System.out.println("Name:" +olduser.getName() + " age:" + olduser.getAge());
}
public static void ana_param(User user)
{
// 改变指向
// red line
user = new User();
user.setName("new obj change");
user.setAge(100);
System.out.println("Name:" +user.getName() + " age:" + user.getAge());
}
public static void ana_param_2(User user)
{
// 直接使用传入的对象,不给它新的指向
// blue line
user.setName("not new obj");
user.setAge(200);
System.out.println("Name:" +user.getName() + " age:" + user.getAge());
}
}
String作为参数
package com.company;
public class Main {
public static void main(String[] args) {
String oldstr = "const-save";
ana_param(oldstr);
System.out.println(oldstr+ "\n\n");
ana_param_2(oldstr);
System.out.println(oldstr+ "\n\n");
StringBuilder sb = new StringBuilder("const-save");
ana_param_3(sb);
System.out.println(sb.toString());
}
public static void ana_param(String str)
{
// 改变指向
str = "change-1";
System.out.println(str);
}
public static void ana_param_2(String str)
{
// 还是变化了指向
str = str.concat("not yinyong");
System.out.println(str);
}
public static void ana_param_3(StringBuilder str)
{
// 还是使用StringBuilder的方法直接改变指向的字符串信息
str.append("not yinyong");
System.out.println(str.toString());
}
}
-------------------- output ------------------------
change-1
const-save
const-savenot yinyong
const-save
const-savenot yinyong
const-savenot yinyong