java 参数传递 session等作用域中值得改变

来源:互联网 发布:黄金时时彩软件 编辑:程序博客网 时间:2024/05/18 01:55

参数传递:

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() %>
解析:如果在作用域中存放的是对象,当取得对象后,即取得了这个地址,改变属性内容作用域中即改变



0 0
原创粉丝点击