Java千百问_06数据结构(004)_java数据类型的字面值是什么
java字面值,字面值是什么,二进制字面值,基本类型字面值,java数字字面值2016-05-27
了解8种基本数据类型看这里:java有哪8种基本数据类型
首先看一个问题,我们知道byte是一个8位整数的基本类型,范围-128到127,我们可以这样说使用:
byte a = 127;
byte a = 0;
但是,当我们定这样一个方法:
public static void a(byte a) {
System.out.println("byte:" + a);
};
public static void main(String[] args) throws Exception {
Test.a(0);
}
竟然会报编译错误,我们感觉到很奇怪,为什么会出现这样的情况?
其实,这样的问题就是java字面值导致的。
字面值,顾名思义就是表面上的值,例如整型字面值在源代码中就是诸如5,0,-200这样的。
java字面值的规则:
在赋值操作中,不加L/l的整型字面值字面值可以赋给byte、short、int、long,Java会自动处理好这个过程(对于long类型,如果大小没有超出int所能表示的范围:32bits,则可以不使用L/l结尾来表示;反之则必须要加)。
但在方法调用中,则完全不同, 当调用Test.a(0)时,java会将0这个字面值认为是int类型的,它能匹配的方法是a(int),而不是a(byte),当然不能通过编译。
上面我们说的都是10进制字面值,如果要表示其他进制如下:
以上例子结果均表示50(十进制),当然这些在Jdk 7之后才有。
我们先看一个例子:
public static void main(String[] args) throws Exception {
byte b = 'a';
Test.a(b);
}
public static void a(byte a) {
System.out.println("byte:" + a);
};
首先没有编译错误,运行后结果如下:
byte:97
说明byte a = ‘a’;是合法的,也就是说字符字面值可以自动转换成16位的整数。间接说明char类型是一种特殊的整型数据类型。