Java 为什么我的渴望变成了渴望?

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:

我正在处理一个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:             <%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

Change
long 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-like
long number=900L作为长数字的后缀@Jigar-我已经修好了。然而,它确实告诉我,我需要咖啡因或睡眠;最好是后者。
new Long(900000000)
不起作用,因为
900000000
仍将被解释为
int
new Long(900000000)
不起作用,因为
900000000
仍将被解释为
int
。@Stephen C:我想如果我把它改成“考虑”的话,你会同意的。真正的问题是JLS说没有后缀的整数文本是
int
文本。编译器只是一个实现JLS的软件。。。它对这件事没有任何“看法”。@Stephen C:我想如果我把它改成“考虑”,你会同意的。真正的问题是JLS说没有后缀的整数文本是
int
文本。编译器只是一个实现JLS的软件。。。它对此事没有任何“看法”。