Long l=1;为什么通不过?
class LongTest
{
public static void main(String[] args)
{
Long l=1;
System.out.println("Hello World!");
}
}
报错信息:
E:\code\java>javac LongTest.java
LongTest.java:5: 错误: 不兼容的类型
Long l=1;
^
需要: Long
找到: int
1 个错误
最近在看JAVA基础,其实上面说得很清楚了,整数型默认是int,long型值后面要加上l或L,java才会把它当long
但是我现在声明的变量就是一个long型的,这还不清楚吗?
为什么非要在值后面加l?
------解决方案--------------------long和Long不一样,如果是long l=1;是没有问题的,自动转型int to long,但Long是long的包装类。
包装类的自动装箱与拆箱只能与对应的基本类型之间,基本类型之间要人工转型,你的改为Long l=1l;或者Long l=(long)1;就可以了。1默认为int型,1l才是long型。
多看看书再问吧,再有问题可以继续问
------解决方案--------------------
4000000000是整型,只有在4000000000后加l或L(4000000000l或4000000000L)编译器才会把它当长整型处理,
long l=4000000000;
此语句可解析为把整型4000000000赋值给长整型l,而4000000000超出了int的取值范围,所以报错
------解决方案--------------------Short s = 1;
此语句可解析为把整型1赋值给短整型s,而1既在int的取值范围,也在Short的取值范围,所以不报错
------解决方案--------------------float 那个例子倒是可以解释,因为计算机的浮点数并不精确,所以你写成了1.1,系统并不知道你的意思是一个float还是一个double。比如如下代码:
System.out.println(1.1 == 1.0999999999999999999);
将会输出true
至于Short s = 1; 这个情况,我觉得可能是一种语法糖。因为我网上找到的所有资料无一例外都是说需要(short)的转换。我想可能是编译器在看到这个值的取值范围在short之内时,就自动转换成short了。但是默认的整型类型,仍然是int,所以不能自动装箱成Long