2016-02-05 138 views
-2

我刚才执行下面的一段代码,为什么编译器不给下面的代码编译器错误?

char a=5; 
System.out.println(a); 

打印语句打印什么,但是当在Eclipse中执行的方盒子。 它可能会给编译器错误吗?因为上面的代码没有任何意义..请纠正我,如果我错了。

+0

它将打印5的ASCII值。它是有道理的。 –

+0

char被定义为不带引号char a = 5; –

+0

尝试此链接:[ASCII值](http://ascii.cl/?wb48617274=5D681385) –

回答

1

该代码是有道理的。

您正在创建一个Unicode代码点5(与ASCII code 5相同)的字符,该字符是非打印字符。

在其他情况下(不打印它)这样做可能有意义,并且它对于可打印字符当然有意义。

如果你想打印的数字“五”,你可以做

char a = '5'; // using a character literal 
char b = 53; // using an integer literal (for the code point) 
0

您正在为char数据类型分配一个整数值,并且它将打印随机符号,因为编译器无法获取char“a”值的值。

0

char a=5;是完全有效的。在Java中,字符不仅仅是单个字母,它也可以是ASCII字符的数字表示。 5是一个“查询”字符。如果你设置了char a = 126,你会得到代字符。

1

char是在0到65535范围内的无符号的整数(我认为,它是为0xFFFF),其打印出作为对应于该号码的Unicode字符,假设计算机支持Unicode。值0到127(0x7f)对应于Unicode的原始前体(ASCII),0到255(0xff)是扩展的ASCII。

char值已经是整数。你可以用它们做算术。

1

您正在将字符代码5分配给变量a。看看这个ASCII Table。 ASCII 5不可打印,例如,如果将此值更改为35,则会打印出#。通过这种方式,Java(和其他语言)允许您对字符值执行算法。

char a = 35; 
    while (a < 100) { 
     System.out.println(a); 
     a++; 
    } 
5

char类型在Java中有两层含义排序。它是一个整数类型(一个char可以具有从0到65535的值),但其目的是表示Unicode字符(至少是基本多语言平面中的那些字符)。如果用System.out.println打印出来,程序将打印由整数表示的字符,而不是整数本身。

虽然它是一个整数类型,但您可以为其指定一个整数。例如,由于字符'A'用Unicode中的整数65表示,因此语句c = 65;c = 'A';完全等效。

因此,该程序没有任何违法行为。但是,Unicode中的字符5(以前是ASCII)是一种“控制字符”,在打印时不会显示为任何内容。

+0

'char'不限于Unicode BMP;它可以包含一个UTF-16 [代理](http://www.unicode.org/glossary/#surrogate_pair),它们成对使用来表示一个Unicode代码点。因此,你不能说它代表一个角色,而不知道它不是代理人。 –

+0

是的,我也忽略了65534和65535不代表Unicode字符的事实。当然这些细节对OP没有任何兴趣。 – ajb

0

此代码没有错误。你可以给一个char变量赋一个int值。如果你可以通过分配一些int值来做一个for循环,你可以看到其他一些字符而不是box。