值传递:
对于基本数据类型,如(int, float等),此种类型进行的即为值传递。这类传递是将自己的"copy"传递给参数,而方法改变的是"拷贝"的值,原值并不会发生改变。
<span style="white-space:pre"> </span>public static void main(String[] args) {
int i=2000;
change(i);
System.out.println(i);
}
private static void change(int s){
s+=s;
}
输出值:2000
引用传递:
像如StringBuilder, 自定义的实体类等都使用的是引用传递,引传递没有"COPY"或者"拷贝"的概念,因此改变这些复杂对象的参数值就相当于改变原值。
<span style="white-space:pre"> </span>public static void main(String[] args) {
StringBuilder sql = new StringBuilder("SELECR * FROM DUAL WHERE 1=1");
System.out.println(sql);
generateSql(sql);
System.out.println(sql);
}
private static void generateSql(StringBuilder sql){
sql.append(" AND 2=2");
}
输出结果:
SELECR * FROM DUAL WHERE 1=1
SELECR * FROM DUAL WHERE 1=1 AND 2=2
SELECR * FROM DUAL WHERE 1=1 AND 2=2
对于String 类型:
应为String 是不可变制度序列,对string的任何修改都是重新开辟内存,而放弃以前的内存引用,因此不会改变原值。