2011-09-20 48 views
0

所以法律Java操作如下:与整数和焦炭

char x = 88; 

int number = 8 + 'E'; 

char x = 'a' + 8; 

是合法的Java经营权?

“因为我的Java老师的话说,ONLY字符在单引号是合法的char和我有明天的考试,所以我想确保我是对的,她并不标志着我错了。

而且,我试着用int和东西玩弄像int x = 40 + 'a'char x = 5 + 'd',他们都得到预测结果(如果我指的是ASCII表)没有任何类型的错误。

+6

有之间的“法律”和“好主意” :-) – paxdiablo

+4

如果你被标错的东西,实际上是正确的,挑战你的老师一个巨大的差异。 –

回答

0

是的,您可以使用/分配一个整数(ASCII)值或一个字符本身到一个char变量。最终将相同的值分配给变量。

但是,您的老师可能会试图建议您一个最佳实践,其中使用字符而不是ASCII值更具可读性。

+0

你的答案的这部分是不正确的 - *“最终都以字节的形式分配给变量”* - 在Java中,'char'值是无符号的16位数。 –

+1

Java char是用于表示UTF-16代码单元的16位无符号值。它们不一定是字节。 –

+0

@亨宁麦克霍尔姆:他们不一定是角色。 ☺ –

0

如果这实际上是你的老师所说的话,那么她是不正确的,你应该能够编写一个证明这一点的程序。

但是,将整数文字用作字符值并不是一个好主意,因为它掩盖了程序的含义。 (也许这就是她在说的,你误解她了。)

+0

是的,我写了一个程序,证明了这一点,是的,我知道这是一个坏主意我不知道'e'+'a'等于什么。不,我没有误解她。我今天跟她说过,她说你只能做'char x ='5''而不是'char x = 5',但我说服了她,否则 – Alex

1

char to int转换被称为widening conversions。在扩大转换时,值不会丢失有关数字值的整体大小的信息,因为intchar转换被称为narrowing conversions。通过缩小转换范围,您可能会丢失有关数值整体大小的信息,并且可能会失去精度。

有关原始转换的更多信息refer此文档。

+0

是的,我发现通过我们的一项练习 – Alex

0

“char”,“int”,“byte”,“short”或“long”都只是一些名字,用于保存串在一起的一堆东西。它们一起被称为integral types。同样,所有这些都是Java知道如何表示为一串位的字面值:0,'0',1,'0',-1,2147483647,'a','A',' 〜',...你得到的照片。我很确定你的问题,你已经知道0和'0'不是一回事。

任何我所列出的值,再加上其他类似的,可以分配给任何整型,但有时你必须迫使他们适应(如byte b = (byte) i,其中iint),你可能会失去当你强制它们时,组成这些值的一些位。

所以是的,你列出的所有操作都是有效的,因为你只是以不同的方式组合不同的整数文字并将它们赋值为整型。

P.S.如果你是Java的新手,不要试图从“整体类型”链接中读取太多内容,否则你的脑袋可能会崩溃。

0

正如其他人所说,什么是合法,什么是一个好主意,是不是总是相同的。

char ch = '0'; 
ch *= 1.1; 
// ch == '4' 

观看无限循环

for(char ch = Character.MIN_VALUE; ch <= Character.MAX_VALUE; ch++) // infinite loop 

你可以用字符做的另一件事是值得怀疑的是从字节[]直接转换为String。

byte[] bytes = 
String text = new String(bytes, 0); 

这适用于ASCII-7文本,但不应该在一般情况下使用。