参数传递:
1.基本类型作为参数传递
public class Test1 {
public static void main(String[] args) {
int n = 3;
System.out.println("Before change, n = " + n);
changeData(n);
System.out.println("After changeData(n), n = " + n);
}
public static void changeData(int n) {
n = 10;
}
}
基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的,输出的结果证明了这一点:
Before change, n = 3
After changeData(n), n = 3
2.对象作为参数传递
public class Test2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello ");
System.out.println("Before change, sb = " + sb);
changeData(sb);
System.out.println("After changeData(n), sb = " + sb);
}
public static void changeData(StringBuffer strBuf) {
strBuf.append("World!");
}
}
先看输出结果:
Before change, sb = Hello
After changeData(n), sb = Hello World!
3.传参后改变对象引用地址
public class Test3 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello ");
System.out.println("Before change, sb = " + sb);
changeData(sb);
System.out.println("After changeData(n), sb = " + sb);
}
public static void changeData(StringBuffer strBuf) {
strBuf = new StringBuffer("Hi ");
strBuf.append("World!");
}
}
发现结果是这样的:
Before change, sb = Hello
After changeData(n), sb = Hello
上述情况改变了,参数引用的地址变成了一个新的对象,所以这个不是修改了原来对象的值
web 作用域中改变值
1.String 等变量类型传递
<%String map = "map"; %>
<%session.setAttribute("map",map); %>
<%String map2 = (String)session.getAttribute("map");
map2 = "newmap";
%>
<%=session.getAttribute("map") %>
解析:String是作为一种变量存放在了作用域中,这种方法并不能改变其值
2.对象
<%
User u = new User();
u.setUid("1");
session.setAttribute("User",u);
%>
<%=((User)session.getAttribute("User")).getUid() %>
<%((User)session.getAttribute("User")).setUid("2"); %>
<%=((User)session.getAttribute("User")).getUid() %>
解析:如果在作用域中存放的是对象,当取得对象后,即取得了这个地址,改变属性内容作用域中即改变