今天在项目中遇到一个奇怪的bug,在jsp页面使用el表达式遍历后台传过来的集合,页面显示是一片空白!查看错误日志才发现报了个错:
javax.servlet.jsp.el.ELException: An exception occured trying to convert String "12341111111111111111" to type "java.lang.Long",意思就是string转换long时出错了,"12341111111111111111"的长度有20,而long类型最大长度为19!但是我封装的后台数据明明是string类型的,凭啥给我转成long类型?
查了下资料才发现,原来使用el表达式时,为了提高开发效率,tomcat会自动将基本数据类型强转成对应的对象,也就是装箱,此时的'12341111111111111111'虽然定义成string类型,但js是弱类型语言,所以直接当成long类型转换了,于是就发生现在所遇到的问题!但为什么会当成Long类型呢?终于在后面代码中找到了原因:
...
将9991改成'9991',刷新页面,OK!
eq,首先通过==判断两个对象是不是相等的,然后检测到9991是int或long类型的,于是在转换pkid为eq右边对应的类型时出错了。
所以咱们不管什么时候都不可粗心大意,尽量做到比较的类型书写上互相保持一致,同时,java做业务开发针对JavaBean,尽量用对象类型,比如Long,String,Boolean, 减少不必要的麻烦,同时还可以避免频繁的装箱拆箱提高系统性能!