Java 为什么我的渴望变成了渴望?
我正在处理一个JSP页面,但在运行时遇到了一个空指针。为了隔离问题,我硬编码了预期的变量响应,而不是使用getter(以前是Java 为什么我的渴望变成了渴望?,java,jsp,nullpointerexception,Java,Jsp,Nullpointerexception,我正在处理一个JSP页面,但在运行时遇到了一个空指针。为了隔离问题,我硬编码了预期的变量响应,而不是使用getter(以前是action.getName(psi.getLong()))。果不其然,当我试图用原始长文件运行页面时,我遇到了一个错误 An error occurred at line: 70 in the jsp file: /auth/foo/viewBar.jsp The literal 9000000000 of type int is out of range 70:
action.getName(psi.getLong())
)。果不其然,当我试图用原始长文件运行页面时,我遇到了一个错误
An error occurred at line: 70 in the jsp file: /auth/foo/viewBar.jsp
The literal 9000000000 of type int is out of range
70: <%long sarah = 9000000000; %>
71: <td> <%= StringEscapeUtils.escapeHtml(""+action.getName(sarah)) %></td>
但从上面来看,我猜90亿美元甚至还没有通过那么远。JSP不能处理long吗
此外,这个错误是否会导致我在运行时遇到的nullpointer错误,或者这是一个完全不同的错误?(这就是stacktrack的全部内容:NullPointerException:null
)
编辑:哦。使用工厂时,忘记实例化我正在使用的一个DAO。那就是空指针的原因。案例关闭。尝试使用
90亿
在这种情况下,您需要指定类型。
或使用
new Long(“900000000”)
尝试使用
90亿
在这种情况下,您需要指定类型。
或使用
new Long(“900000000”)
更改
long sarah=900000000代码>至长莎拉=900000000L代码>。如果没有“L”后缀,任何整数文本在Java中都是int
。Changelong sarah=900000000代码>至长莎拉=900000000L代码>。如果没有“L”后缀,任何整数文本在Java中都是int
。要理解这里发生的事情,您需要了解一些整数文本
在Java中,有两种整数文本
- 长文字有后缀“L”,必须在-2^63到+2^63-1之间。它具有类型
long
- 整型文字没有后缀,必须在-2^31到+2^31-1之间。它的类型为
int
无论上下文如何,超出规定范围的整数文字都是编译错误。因此:
long sarah = 9000000000;
是一个编译错误,尽管该“数字”与LHS上的类型兼容。同样地:
Long fred = new Long(9000000000);
是一个编译错误。。。出于同样的原因
解决方法是添加一个L后缀;e、 g
long sarah = 9000000000L;
Long fred = new Long(9000000000L);
(事实上,我在上面撒了一个小谎。JLS实际上说明整数文字是无符号的,看起来像“负文字”的实际上是一个使用一元减号运算符的表达式。因此,合法的整数文字值是0到+2^31-1(对于int)和0到+2^63-1(对于长)。用于表示Integer.MIN_值和Long.MIN_值的文本2^31和2^63是特殊情况……它们只有在前面加上一元负号时才合法。)要了解这里的情况,您需要了解一点整数文本
在Java中,有两种整数文本
- 长文字有后缀“L”,必须在-2^63到+2^63-1之间。它具有类型
long
- 整型文字没有后缀,必须在-2^31到+2^31-1之间。它的类型为
int
无论上下文如何,超出规定范围的整数文字都是编译错误。因此:
long sarah = 9000000000;
是一个编译错误,尽管该“数字”与LHS上的类型兼容。同样地:
Long fred = new Long(9000000000);
是一个编译错误。。。出于同样的原因
解决方法是添加一个L后缀;e、 g
long sarah = 9000000000L;
Long fred = new Long(9000000000L);
(事实上,我在上面撒了一个小谎。JLS实际上说明整数文字是无符号的,看起来像“负文字”的实际上是一个使用一元减号运算符的表达式。因此,合法的整数文字值是0到+2^31-1(对于int)和0到+2^63-1(对于长)。用于表示Integer.MIN_值和Long.MIN_值的文字2^31和2^63是特殊情况……它们只有在前面加一元负号时才合法。)尝试用L作为长数字的后缀,如Long number=900L代码>@Jigar-我已经修好了。然而,它确实告诉我,我需要咖啡因或睡眠;最好是后者。试着用L-likelong number=900L作为长数字的后缀代码>@Jigar-我已经修好了。然而,它确实告诉我,我需要咖啡因或睡眠;最好是后者。new Long(900000000)
不起作用,因为900000000
仍将被解释为int
new Long(900000000)
不起作用,因为900000000
仍将被解释为int
。@Stephen C:我想如果我把它改成“考虑”的话,你会同意的。真正的问题是JLS说没有后缀的整数文本是int
文本。编译器只是一个实现JLS的软件。。。它对这件事没有任何“看法”。@Stephen C:我想如果我把它改成“考虑”,你会同意的。真正的问题是JLS说没有后缀的整数文本是int
文本。编译器只是一个实现JLS的软件。。。它对此事没有任何“看法”。