当前位置:编程学习 > JAVA >>

java中数字字面量的类型是什么?


public class Test{
    public static void main(String[] args){
        byte a = 1;//这个不用说肯定可以
        boolean b = 1;//这个肯定不可以
        char c = 1;//很奇怪这个竟然可以,1不是int型的么?

        //还有
        char d = a;//不可以
    }
}
到底数字字面量的类型是什么?不应该是int型的么?
--------------------编程问答-------------------- char c=1 在这里1代表某个字符的ASCII码值,所以这个语句在执行时不会报错。
--------------------编程问答--------------------
引用 1 楼 ZZZ5512536 的回复:
char c=1 在这里1代表某个字符的ASCII码值,所以这个语句在执行时不会报错。



那为什么char c = 1L;就会报错? --------------------编程问答-------------------- 你定义的是的ASCII码值,比如说char a=65;在的ASCII码中a就是等于65 --------------------编程问答--------------------
引用 2 楼 qq806418714 的回复:
引用 1 楼 ZZZ5512536 的回复:char c=1 在这里1代表某个字符的ASCII码值,所以这个语句在执行时不会报错。


那为什么char c = 1L;就会报错?

char是一个16位无符号整数。当然不能是long了。 --------------------编程问答--------------------
引用 4 楼 huntor 的回复:
引用 2 楼 qq806418714 的回复:引用 1 楼 ZZZ5512536 的回复:char c=1 在这里1代表某个字符的ASCII码值,所以这个语句在执行时不会报错。

char是一个16位无符号整数。当然不能是long了。


按你这么说难道1是char型的? --------------------编程问答--------------------
引用 5 楼 qq806418714 的回复:
引用 4 楼 huntor 的回复:引用 2 楼 qq806418714 的回复:引用 1 楼 ZZZ5512536 的回复:char c=1 在这里1代表某个字符的ASCII码值,所以这个语句在执行时不会报错。

char是一个16位无符号整数。当然不能是long了。

按你这么说难道1是char型的?

1当然是整形,而char是字符,它可以与相对应的编码值(整型)对应;char d = a;另外这样肯定报错,因为a在这里是变量,这些基本语法与类型可以查看相关的Java入门书籍 --------------------编程问答-------------------- 1什么类型都不是,就是计算机里面一堆0后面加个1 楼主基础知识要牢固一下啊 --------------------编程问答--------------------
引用 6 楼 LaoSiZi 的回复:
引用 5 楼 qq806418714 的回复:引用 4 楼 huntor 的回复:引用 2 楼 qq806418714 的回复:引用 1 楼 ZZZ5512536 的回复:char c=1 在这里1代表某个字符的ASCII码值,所以这个语句在执行时不会报错。

1当然是整形,而char是字符,它可以与相对应的编码值(整型)对应;char d = a;另外这样肯定报错,因为a在这里是变量,这些基本语法与类型可以查看相关的Java入门书籍


你知道Java是强类型的吧? --------------------编程问答-------------------- public class Test1 {

/**
 * java中的基本数据类型采用的是向上自动兼容,所以字符类型、字节类型也是整数类型中的一种
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a = 1;//这个不用说肯定可以     ,但要注意表示范围
// byte g=259;超出byte所能表示的范围啦
boolean b = true;//java中布尔类型的只有true和false(必须小写)不能参与其他数据之间的运算
char c = 1;//当byte(8位)、short(16位)、int(32位)在一起进行运算时java虚拟机会自动把其他类型转换成int类型
char f=29999;//java是用unicode来表示字符。char(16位),要注意用一个超过16位的2进制的数来表示,超出表示范围,系统就会提示错误
        //char e=299999; c超出范围
char d = 'a';//char d=a;是错误的。java中字符类型要用''引起来
}
} --------------------编程问答--------------------
引用 8 楼 qq806418714 的回复:
引用 6 楼 LaoSiZi 的回复:引用 5 楼 qq806418714 的回复:引用 4 楼 huntor 的回复:引用 2 楼 qq806418714 的回复:引用 1 楼 ZZZ5512536 的回复:char c=1 在这里1代表某个字符的ASCII码值,所以这个语句在执行时不会报错。

1当然是整形,而char是字符,它可以与相对应的编码值(整型)对应;c……

Java是强类型,char的详细解释如下:
char 数据类型(和 Character 对象封装的值)基于原始的 Unicode 规范,将字符定义为固定宽度的 16 位实体。Unicode 标准曾做过修改,以允许那些其表示形式需要超过 16 位的字符。合法代码点 的范围现在是从 U+0000 到 U+10FFFF,即通常所说的 Unicode 标量值。(请参阅 Unicode 标准中 U+n 表示法的定义。) 

从 U+0000 到 U+FFFF 的字符集有时也称为 Basic Multilingual Plane (BMP)。代码点大于 U+FFFF 的字符称为增补字符。Java 2 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示形式。在这种表现形式中,增补字符表示为一对 char 值,第一个值取自高代理项 范围,即 (\uD800-\uDBFF),第二个值取自低代理项 范围,即 (\uDC00-\uDFFF)。 

所以,char 值表示 Basic Multilingual Plane (BMP) 代码点,其中包括代理项代码点,或 UTF-16 编码的代码单元。int 值表示所有 Unicode 代码点,包括增补代码点。int 的 21 个低位(最低有效位)用于表示 Unicode 代码点,并且 11 个高位(最高有效位)必须为零。除非另有指定,否则与增补字符和代理项 char 值有关的行为如下: 

只接受一个 char 值的方法无法支持增补字符。它们将代理项字符范围内的 char 值视为未定义字符。例如,Character.isLetter('\uD840') 返回 false,即使是特定值,如果在字符串的后面跟着任何低代理项值,那么它将表示一个字母。 
接受一个 int 值的方法支持所有 Unicode 字符,其中包括增补字符。例如,Character.isLetter(0x2F81A) 返回 true,因为代码点值表示一个字母(一个 CJK 象形文字)。 
在 Java SE API 文档中,Unicode 代码点 用于范围在 U+0000 与 U+10FFFF 之间的字符值,而 Unicode 代码点 用于作为 UTF-16 编码的代码单元的 16 位 char 值。有关 Unicode 技术的详细信息,请参阅 Unicode Glossary。 

--------------------编程问答-------------------- 觉得char c = 1;是合理的那八成是从C语言转过来的,C语言是弱类型的语言所以可以,但Java是强类型检测,两个不相同的类型的赋值应该是不允许的。现在的情况是,把整型变量赋值给字符型变量是不可以的,这符合Java的宣称强类型语言,而把整型字面量赋值给字符型变量却是可以的,这不符合Java宣称的强类型语言
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,