请看代码:
Object obj1=session.getAttribute(USER_STRING);
SessionUser obj2=new SessionUser();
System.out.println("obj1's class:"+obj1.getClass());
System.out.println("obj2's class:"+obj2.getClass());
System.out.println("obj1:"+obj1);
System.out.println("obj2:"+obj2);
System.out.println("obj1:"+(obj1 instanceof SessionUser));
System.out.println("obj2:"+(obj2 instanceof SessionUser));运行结果:
obj1's class:class com.yisoft.yfc.session.SessionUserobj2's class:class com.yisoft.yfc.session.SessionUserobj1:com.yisoft.yfc.session.SessionUser@1dd58d8obj2:com.yisoft.yfc.session.SessionUser@1b3e93obj1:falseobj2:true
居然有这种事!!!!!!
Object obj1=session.getAttribute(USER_STRING);
SessionUser obj2=new SessionUser();
System.out.println("obj1's class:"+obj1.getClass());
System.out.println("obj2's class:"+obj2.getClass());
System.out.println("obj1:"+obj1);
System.out.println("obj2:"+obj2);
System.out.println("obj1:"+(obj1 instanceof SessionUser));
System.out.println("obj2:"+(obj2 instanceof SessionUser));运行结果:
obj1's class:class com.yisoft.yfc.session.SessionUserobj2's class:class com.yisoft.yfc.session.SessionUserobj1:com.yisoft.yfc.session.SessionUser@1dd58d8obj2:com.yisoft.yfc.session.SessionUser@1b3e93obj1:falseobj2:true
居然有这种事!!!!!!
解决方案 »
- 求httpclient3.1或者4.0的API!
- 一个xfire webservice 问题请高手解决
- 该怎样总结网站的框架
- ssh调用问题
- Struts 配置文件中的 message-resources 是否可以配置成 war 包外的目录?
- 关于正则表达式的用法
- 如何找出不同名字的文件???????????????????????????????????
- 急求::jsp页面打印例子!!!(在线等,高分相送) thanks!!!!!!!!!!!
- easyui artDialog prompt框增加回车提前事件
- select控件关联问题。。。
- jsp页面偶尔出现已终止操作已终止操作
- select多选框的问题???
SessionUser obj2=new SessionUser();这是同一类型的两个对象吗?代码没问题啊,obj2确实是SessionUser()的实例啊,但obj1怎么是SessionUser()的实例。
boolean isObject = s instanceof Object;我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向
的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的
值为True。因为Object是所有其他类型的基类,所以s instanceof Object=true,
而楼主Object obj1=session.getAttribute(USER_STRING);
obj1明明定义的是Object,所以obj1 instanceof SessionUser肯定是false
向上转型是可以的,但是向下转型就不对了另外补充一下:
getClass()也是java.lang.Object 类定义的方法,他返回某个对象的运行期类(runtime class)。
所以尽管obj1.getClass()=SessionUser,但是obj1并不是SessionUser的实例,
Object obj1=new SessionUser();
SessionUser obj2=new SessionUser();
System.out.println("obj1:"+(obj1 instanceof SessionUser));
System.out.println("obj2:"+(obj2 instanceof SessionUser));
改成这样就相同了
ArrayList obj2=new ArrayList();
System.out.println("obj1:"+(obj1 instanceof ArrayList));
System.out.println("obj2:"+(obj2 instanceof ArrayList));你可以自己测试一下,上面的代码输出是:
obj1:true
obj2:true
longlinhuang(龙麟)
难得你写这么多,可惜是错的,而且还说“肯定是false",你运行代码了吗?
我本来不想回这个帖子了,因为楼主开了两个,但是没想到大家的基本功这么不扎实。
请尝试运行下列代码:
Object o = new ArrayList();
System.out.println(o instanceof ArrayList);
如果认为不准确在运行下列代码:
<body bgcolor="#ffffff">
<%
session.setAttribute("name","aaa");
Object o = session.getAttribute("name");
out.print(o instanceof String);
%>
</body>
我就说嘛,急着找工作没用的,因为在基本功不扎实的情况下很难在改正以前的错误认识。可能几年下去都是这样认为的了。
SessionUser对象
你说我没运行代码,但是你运行代码了嘛?你只不过找了个类似的例子,并不能说明什么,楼主肯定是运行了代码的,他现在结果一false一true,如果你认为他结果错了,请分析原因,如果他结果没错,请给出为什么一false一true的原因,你的2个例子完全说明不了原因
而且对你找的例子完全不敢苟同,
Object o = new ArrayList();
从这个得出 o instanceof ArrayList=true,
但是楼主的例子里是这样的:Object obj1=session.getAttribute(USER_STRING);
难道你 认为new SessionUser()等价于 session.getAttribute(USER_STRING),这么明显的错误居然还用来驳斥我的结论,我觉得真是不可思议
至于为什么obj1.getClass()=SessionUser,我已经解释过了,getClass()得到的是对象的运行期类
另外请楼主把SessionUser这个类贴出来看看,好像是楼主自定义的把
首先如果我的话伤害了你,那么我郑重的道歉,对不起。
我的观点是,楼主的问题是个奇怪的问题,应该输出两个true才对。而且我的代码我都运行过了。楼主的:
Object obj1=session.getAttribute(USER_STRING);
System.out.println("obj1:"+(obj1 instanceof SessionUser));我的:
session.setAttribute("name","aaa");
Object o = session.getAttribute("name");
out.print(o instanceof String);
我觉得我这段代码很能说明问题了吧。和楼主的没有区别。
如果你认为out.print(o instanceof String)为false(从你的“obj1明明定义的是Object,所以obj1 instanceof SessionUser肯定是false”推断的),那么你是错的;如果你认为是true,
那么我向你道歉,我理解错了,对不起!
所以无法执行.我觉得问题的关键是 session.getAttribute(User_String)以及SessionUser这个类,对于你的例子是正确地那是勿庸置疑的,但是能不能用来代替楼主的问题,却是有一点疑问的,另外我的言语可能有点激动,并不针对任何人,大家都只是想解决问题而已,对于问题的都是好奇的最后我也向你道歉,楼主不知道还在不在,请务必来看看====CSDN 小助手 V2.0 2005年10月16日发布====
CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/10/16/504620.aspx
下载:http://szlawbook.com/csdnv2/csdnv2.rar为神六喝彩,向所有科技工作者致敬!
拒绝日货。
funcreal(为中华之崛起而编程) 给的测试代码我也运行了,结果是true。
dongdong715(美女追我八条街(抵制日货))
虽然我不敢说我的面向对象的理解有多深,但你说的那点我还是清楚的,问题是你根本就没搞懂我提的那个问题。
Object obj1=new SessionUser();
SessionUser obj2=new SessionUser();
System.out.println("obj1:"+(obj1 instanceof SessionUser));
System.out.println("obj2:"+(obj2 instanceof SessionUser));
以上代码的输出是什么,
另外你的session类是com.yisoft.yfc.session,是自己写的嘛?如果是请把该类的原代码贴出来看看好吗
String s = "I AM an Object!";
boolean isObject = s instanceof Object;String是Object的实例,因为Object是万事万物的基类,但是楼主要证明的是:
Object obj1=session.getAttribute(USER_STRING);
System.out.println("obj1:"+(obj1 instanceof SessionUser));也就是说换成longlinhuang(龙麟)所说的就是:
boolean isObject = Object instanceof SessionUser;Object会是SessionUser的实例吗?显然是错误的,大家好好想想吧,我一开始也差点吐血,呵呵,后来一看不对.
Object obj1=new SessionUser();
SessionUser obj2=new SessionUser();
System.out.println("obj1:"+(obj1 instanceof SessionUser));
System.out.println("obj2:"+(obj2 instanceof SessionUser));
输出是两个true。
private Object userObject;
public SessionUser() {
}
public Object getUserObject() {
return userObject;
}
public void setUserObject(Object userObject) {
this.userObject = userObject;
}
public boolean isLogin(){
return !(userObject==null);
}}
package com.yisoft.yfc.session;import javax.servlet.http.HttpSession;public class SessionManager {
private static String USER_STRING="user";
public SessionManager() {
}
public static boolean isNewSession(HttpSession session){
return session.getAttribute(USER_STRING)==null;
}
public static void createSession(HttpSession session){
session.setAttribute(USER_STRING,new SessionUser());
}
public static void login(HttpSession session, Object userObject){
SessionUser user=getUser(session);
user.setUserObject(userObject);
}
public static void logout(HttpSession session){
SessionUser user=getUser(session);
user.setUserObject(null);
}
public static SessionUser getUser(HttpSession session){
Object obj1=session.getAttribute(USER_STRING);
SessionUser obj2=new SessionUser();
System.out.println("obj1's class:"+obj1.getClass());
System.out.println("obj2's class:"+obj2.getClass());
System.out.println("obj1:"+obj1);
System.out.println("obj2:"+obj2);
System.out.println("obj1:"+(obj1 instanceof SessionUser));
System.out.println("obj2:"+(obj2 instanceof SessionUser));
return (SessionUser) obj1;
}}
但是发现getClass()方法能显示出来结果,说明的确是有这个实例存在的。我也试了一下
<jsp:useBean class="com.mypackage.A" id="a" scope="session"/>
<%
Object o = request.getSession().getAttribute("a");
response.getWriter();
out.println(o.getClass());
out.println(o instanceof com.mypackage.A);
%>
里面A是我自己写的一个空类。
显示结果是class com.mypackage.A true
跟楼主的程序大同小异,但是结果是true。
关注中,希望明白人解答咯~