问题描述
<%@ page import="java.util.*"%><%@ page language="java" contentType="text/html;charset=gb2312"%><html><body><% int num; if(application.getAttribute("num")==null) { application.setAttribute("num","1"); } else{ num=Integer.parseInt((String)application.getAttribute("num"));//mark num++; application.setAttribute("num",Integer.toString(num)); out.println(application.getAttribute("num").getClass().getName()); out.println((String)application.getAttribute("num").getClass().getName()); }%><h1>这个页面已经被浏览了<%=(String)application.getAttribute("num")%>次</h></body></html> ------------------------------输出----------------------------------既然application.getAttribute("num")返回类型是String,那么为什么把//mark处的代码改为num=Integer.parseInt(application.getAttribute("num");则会提示:The method parseInt(String) in the type Integer is not applicable for the arguments (Object)?
解决方案
因为你往里面放的就是String 所以获取的时候就是java.lang.String 若是你往里面放Integer,则取出来就是java.lang.Integer,所以application.getAttribute("num").getClass().getName()取出来是实际的数据类型但是application.getAttribute("num")取出来的是Object,因为Object是所有的类的父类,你可以使用instanceof进行判断
解决方案二:
第一,返回的是Object,需要强转第二,String也属于object第三,application.getAttribute("num").getClass().getName()里的getname()方法返回的是一个字符串
解决方案三:
说有的getAttribute()方法返回的都是Object对象。需要强制类型转换。
解决方案四:
1、application.getAttribute("num")返回的是Object类型的,不是String类型的。2、Integer.parseInt(String)参数为String类型不是Object类型。3、你的写法太复杂了,可以直接Integet num = (Integer)application.getAttribute("num")。