这其实是Java中变量和对象作用域的问题。
首先说说String吧,
-
Strings=
"s"
;
-
session
.setAttribute("s"
,s);
String s = "s";
session
.setAttribute("s",s);
session
里存的是指向"s"这个对象的引用,而后
s = "ss";
则是把s引用指向另一个对象"ss",所以输出s。对于基本类型的包装器类型,也是同理。
至于Map,
-
Map<String,String>s=
new
HashMap<String,String>();
-
session
.setAttribute("s"
,user);
Map<String,String> s = new HashMap<String,String>();
session
.setAttribute("s",user);
把一个指向map的引用存进了session
,之后对这个HashMap对象所作的
变化,还是会反映给这个指向他的引用。
其他对象的道理,和Map一样。
可能你要问了,String和Integer同样也是对象,为什么和Map这样的对象有不同的效果呢。其实,细看你就会发现,你对String和
Integer的操作并不是在同一个对象上进行的,而是赋予了另一个不同的对象,也正因为String和Integer对象的不可变性,导致了要改变这两
个对象的值,只有新建一个对象。换句话说,只要是在同一个对象上操作,该对象的变化肯定能被session
中
的引用所反映。
你可以做如下试验,
-
Mapmap=
new
HashMap();
-
Mapinside=new
HashMap();
-
inside.put("1"
,
"a"
);
-
inside.put("2"
,
"b"
);
-
-
map.put("a"
,inside);
-
-
inside=new
HashMap();
-
System.out.println(map.get("a"
));
Map map=new HashMap();
Map inside=new HashMap();
inside.put("1", "a");
inside.put("2", "b");
map.put("a", inside);
inside=new HashMap();
System.out.println(map.get("a"));
是不是和上面是一样的结果?
上面的这些赋值都是赋的引用,而Java的基本数据类型赋的是值,所以当int被赋到session
中
后,
-
int
i=
1
;
-
session
.setAttribute("i"
,i);
int i = 1;
session
.setAttribute("i",i);
无论这个i怎么
变,都不会改变session
中i的值。
分享到:
相关推荐
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除……
痴迷 合并所有组件的文件大小 该OB-session软件包包含三个引用,使会话存储存储OB jects更容易和更快: 一个小的“ api”,它增强了sessionStorage.setItem,sessionStorage.getItem和sessionStorage.removeItem调用...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5.列出Jsp中包含外部文件的方式,两者有何区别。 6.说明Jsp中errorPage的作用,应用范围。 7.介绍在Jsp中如何使用JavaBeans。 8.简单介绍...
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
值传递和引用传递有什么不同? char型变量是否可以存储一个中文汉字 s=null和s=” ”是否相同 new String(“abc”)创建了几个对象 String变量做“+”运算时的编译优化 "=="和equals方法究竟有什么区别 String,...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
内存储存,速度极快 135 丰富的附加功能 136 完善的文档 137 良好的支持 137 广泛的使用 138 【Nginx】Nginx如何配置防止DDOS攻击? 139 限制每秒请求数 139 限制IP连接数 139 白名单设置 139 【数据结构】数组与...
8.4.1 Session的save()和persist()方法 8.4.2 Session的load()和get()方法 8.4.3 Session的update()方法 8.4.4 Session的saveOrUpdate()方法 8.4.5 Session的merge()方法 8.4.6 Session的delete()方法 ...
8.4.1 Session的save()和persist()方法 8.4.2 Session的load()和get()方法 8.4.3 Session的update()方法 8.4.4 Session的saveOrUpdate()方法 8.4.5 Session的merge()方法 8.4.6 Session的delete()方法 ...
8.4.1 Session的save()和persist()方法 8.4.2 Session的load()和get()方法 8.4.3 Session的update()方法 8.4.4 Session的saveOrUpdate()方法 8.4.5 Session的merge()方法 8.4.6 Session的delete()方法 ...
8.4.1 Session的save()和persist()方法 8.4.2 Session的load()和get()方法 8.4.3 Session的update()方法 8.4.4 Session的saveOrUpdate()方法 8.4.5 Session的merge()方法 8.4.6 Session的delete()方法 ...
d) 在bb.jsp中使用session的getAttribute方法取出的对象和aa.jsp中的beanName所引用的对象无关。 10) 用JSP2.0表达式语法在JSP页面上正确显示10+20的结果的是()。 a) ${10+20} b) ${10+20}; c) $(10+20)...
67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现...