我看到char和short都是两个字节, 以下内容也是有效的:
char a = 'x';
int b = a;
long c = a;
然而,当我做短d = a;我收到的错误无法从char转换为short。 即使两者都是两个字节。
我可以看到char的一个用途是当你打印它时,它会显示角色。这是char的唯一用途吗?
答案 0 :(得分:4)
在Java中,数据类型char
是无符号的2字节变量,而short
是有符号的2字节变量。由于存在这种差异,您无法将char
转换为short
,因为char
的额外位不是有符号位。
这意味着,如果您将char
转换为short
,则必须截断导致投诉的char
。
答案 1 :(得分:3)
您可能希望阅读data types和type casting以便清楚了解。
当您尝试short d=a;
时,您正尝试进行'缩小原始转换'。
5.1.3缩小原始转换次数
以下22个具体转换 原始类型称为 缩小原始转换:
short to byte or char char to byte or short int to byte, short, or char long to byte, short, char, or int float to byte, short, char, int, or long double to byte, short, char, int, long, or float
缩小转化次数可能会失败 有关整体的信息 数值的大小和可能 也失去了精确度。
答案 2 :(得分:2)
虽然char是无符号16位类型,但它并不是设计用于这样的。从概念上讲,char是一个Unicode字符(更准确地说,是Unicode子集中的一个字符,可以用UTF-16中的16位表示),这比一个数字更抽象。您应该只为文本字符使用字符。我认为将它作为整数类型在Java方面是一种糟糕的设计。它不应该允许char和整数类型之间的任何转换,除非使用特殊的实用方法。像boolean是不可能转换为整数和返回。
答案 3 :(得分:1)
char通常仅用于文本,是的。
char是无符号的,而short是签名的。
答案 4 :(得分:1)
一切都在那里...... Char和Short不一样。
答案 5 :(得分:1)
通常,我使用char作为文本,使用short作为数字。 (如果我使用short。我宁愿在它们可用时使用int / long。)
您可能想要“转换”变量。这是这样做的:
char a = 'x';
short sVar = (short)a;
System.out.println(a);
System.out.println(sVar);
答案 6 :(得分:0)
char
是Unicode字符,因此必须是无符号的。 short
与签名的所有其他数字基元类型一样。因此,short
和char
涵盖两个不同的值范围,导致编译器抱怨分配。