Java千百问_06数据结构(004)_java数据类型的字面值是什么

1、java数据类型的字面值是什么

了解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字面值的规则:

  1. 如果整型字面值后面加上L或者l,则这个字面值就是long类型,比如:1000L代表一个long类型的值。
  2. 如果整型字面值不加L或者l,则为默认int类型,比如:1000代表一个int类型的值。
  3. 如果浮点字面值后面加上F或者f,则这个字面值就是float类型,比如:0.1f代表一个float类型的值。
  4. 如果浮点字面值不加F或者f,或者加上D或者d,则为doublie类型,比如:0.1、0.1D代表一个double类型的值。
  5. 浮点字面值支持科学计数法表示,比如:1.23e-4代表一个double类型值的科学计数法表达式。

在赋值操作中,不加L/l的整型字面值字面值可以赋给byte、short、int、long,Java会自动处理好这个过程(对于long类型,如果大小没有超出int所能表示的范围:32bits,则可以不使用L/l结尾来表示;反之则必须要加)。 
但在方法调用中,则完全不同, 当调用Test.a(0)时,java会将0这个字面值认为是int类型的,它能匹配的方法是a(int),而不是a(byte),当然不能通过编译。

2、什么是二进制字面值

上面我们说的都是10进制字面值,如果要表示其他进制如下:

  • 16进制:0X or 0x前缀,例如:0x32
  • 10进制:无前缀,例如:50
  • 8进制:0前缀,例如:062
  • 2进制:0B or 0b前缀,例如:0b00110010

以上例子结果均表示50(十进制),当然这些在Jdk 7之后才有。

3、字符字面值是什么

我们先看一个例子:

    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类型是一种特殊的整型数据类型。

原文地址:http://blog.csdn.net/ooppookid/article/details/51291096

时间: 2024-10-28 22:49:26

Java千百问_06数据结构(004)_java数据类型的字面值是什么的相关文章

Java千百问_06数据结构(002)_java有哪8种基本数据类型

1.java有哪8种基本数据类型 了解数据类型看这里:java种数据类型是什么  基本数据类型包括4大类,每一类都对应一个类类型的包装器(包装类),如下:  了解基本类型包装器看这里:[什么是基本类型包装器][3]  [3]: byte  byte数据类型是8位.有符号的,以二进制补码表示的整数:  最小值是-128(-2^7):  最大值是127(2^7-1):  默认值是0:  byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一:  例子:b

Java千百问_06数据结构(008)_null属于哪种数据类型

1.null属于哪种数据类型 首先,在Java中,null本身不是对象,也不是Objcet的实例.那么他属于哪种数据类型呢?  了解数据类型看这里:java中数据类型是什么  java基本数据类型看这里:[java有哪8种基本数据类型3  具体看下面这个例子: if (null instanceof java.lang.Object) { System.out.println("null属于java.lang.Object类型"); } else { System.out.printl

Java千百问_06数据结构(014)_java数组如何存储在内存中

1.数组的内存空间是何时分配的 Java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程.即使某个元素被清空,但其所在空间仍然保留,因此数组长度将不能被改变.  了解什么是数组看这里:java中的数组是什么  当仅定义一个数组变量(int[] numbers)时,该变量还未指向任何有效的内存,因此不能指定数组的长度,只有对数组进行初始化(为数组元素分配内存空间)后才可以使用.  数组初始化分为静态初始化(在定义时就指定数

Java千百问_06数据结构(011)_java中的数组是什么

1.什么是数组 Java提供了一个用于存储相同类型的元素的,固定大小的连续集合数据结构:数组. 数组是用于存储数据的集合,储存相同类型数据的集合. 与单个变量相比(如number0, number1 - number99),数组变量需要使用下标索引来确定数组中某个数据的顺序(如numbers[0], numbers1 - numbers[99] ).  了解变量看这里:局部变量.类变量.实例变量有什么区别2 2.如何声明数组 一个程序要使用数组,必须声明一个变量来引用数组,而且需要指定数组变量的

[置顶] Java千百问_06数据结构(001)_java中数据类型是什么

1.什么是数据类型 Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed)的.  强类型意味着每个变量都具有一种类型,并且每种类型都是严格定义的(当然泛型比较特殊,看这里:泛型是什么),类型限制了变量可以赋哪些值,表达式最终产生什么值.同时限制了这些值可以进行的操作类型以及具体方法.所有的赋值操作,无论是显式的还是在方法调用中通过参数传递,都要进行类

Java千百问_06数据结构(006)_java基本数据类型如何转换

1.基本类型如何相互转换 我们看到,将一种类型的值赋给另一种类型是很常见的.在Java中,boolean类型与所有其他7种类型都不能进行转换,这一点很明确.  对于其他7中数值类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化.  java中8种基本数据类型看这里:java有哪8种基本数据类型  转换分为自动转换和强制转换.对于自动转换(隐式),无需任何操作,而强制类型转换需要显式转换,即使用转换操作符(type). 首先将7种类型按下面顺序排列一下: byte <(short

Java千百问_06数据结构(015)_数组和普通对象的引用变量有什么区别

1.数组和普通对象的引用变量有什么区别 了解什么是数组看这里:java中的数组是什么  对于Java的数组来说,只有类型兼容(即属于同一数据类型体系且遵守优先级由低到高原则),才能将数组引用传递给另一数组引用,但仍然不能改变数组长度(仅仅只是调整数组引用指针的指向).  了解数组传递看这里:数组如何传递 public class TestArrayLength { public static void main(String[] args) { int[] numbers = { 3, 5, 1

Java千百问_06数据结构(019)_Arrays类有什么功能

1.Arrays类有什么功能 Java.util.Arrays中的类包含了很多静态方法,用于排序数组.搜索数组.比较数组和填充数组元素等功能. 了解一维数组看这里:java中的数组是什么 常见方法如下: public static int binarySearch(Object[] a, Object key)  使用二分法搜索数组中指定值的位置(下标).如果数组类型非基本数据类型,则需要类实现Comparable接口中的compareTo方法. public static boolean eq

Java千百问_06数据结构(003)_什么是基本类型包装器

1.什么是包装器 包装器也叫包装类,继承于Object,可以当作8种基本数据类型的类映射,包装器可以直接转换为基本数据类型(成为拆箱).如下:  了解8种基本数据类型看这里:java有哪8种基本数据类型 2.包装器有什么作用 包装器描述了基本数据类型的若干属性,包括基本类型的取值范围以及长度等.  例子: public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.pri