将Integer.parseInt的结果分配给char基元

时间:2018-12-23 13:00:50

标签: java char

声明

char c = 10;

编译正常,但是

char d = Integer.parseInt("10");

导致编译错误

  

“类型不匹配无法从int转换为char”。

这两个语句有什么区别?

6 个答案:

答案 0 :(得分:3)

这在Java语言规范5.2分配上下文中有记录:

  

此外,如果该表达式是以下内容的常量表达式(第15.28节)   输入byte,short,char或int类型:

     
      
  • 如果变量的类型是byteshortchar,并且常量表达式的值是   可以表示为变量的类型。
  •   

10是一个常量表达式,在char中可以表示10(char可以存储0〜65535),因此从intchar的转换被允许。 Integer.parseInt("10")不是常数表达式(必须在运行时求值),因此此处不允许从intchar的转换。

答案 1 :(得分:1)

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. 不是int。它们是Java中的两种不同的原始类型。一个int为char,一个char为32bit

完成时

8bit

您正在将char d = Integer.parseInt("10"); “ 10”解析为string,然后尝试将其分配给一个char,除非您明确指定向下转换,否则该char将不起作用。由于精度下降,编译器会抱怨并要求您显式降低精度。向下投射,如下所示:

int

在第一句话中,

char d = (char) Integer.parseInt("10");

值10在char c = 10; 的范围内。范围是(0-65,536)无符号,因此没有问题。假设该值大于此值,您将遇到相同的问题。

答案 2 :(得分:1)

在JLS 5.2部分:

  

赋值上下文允许将表达式的值赋给变量(第15.26节)

     

如果该表达式是字节类型的常量表达式(第15.28节),   简称,字符或整数:
  •如果满足以下条件,则可以使用缩小原始转换   变量的类型为byte,short或 char ,而   常数表达式可以表示为变量的类型

什么是constant expression

  

常量表达式是表示原始值的表达式   类型或不是突然完成且由以下内容组成的字符串   仅以下...

所以,恕我直言, 在char c=10;中,类型constant expression的{​​{1}}被分配给类型int的变量,并且正在发生char

narrowing primiteve conversion中,char d= Integer.parseInt("10");返回一个int位的Integer.parseInt()值,该值将超过{ {1}}类型,因此它抱怨并要求显式降级。

答案 3 :(得分:0)

首先,请注意int的容量比char大得多。

  1. 您的第一个示例将进行编译,因为只有在100%确定转换成功后,编译器才允许进行隐式转换。编译器知道从10int的{​​{1}}将成功。另一方面,说是char无法编译...

  2. 您的第二个示例未编译,因为char c=101111;在运行时生成了值,并且编译器无法告知将为Integer.parseInt("10")分配什么值,因此需要显式强制转换才能进行编译。

答案 4 :(得分:0)

在第一个中,您要为字符分配字符值10。如果您打印字符,它将打印新行。因为换行符的字符值为10

但是在第二个示例中,您试图将Integer Object分配给char,但这是不可能的。您只能为char指定一个实字符或一个字符值

例如

char c='A';
char c=65;

这两个都将打印A,因为A的字符值为65

也请参考此link以获得更多信息

答案 5 :(得分:0)

在这种情况下,我们将字符串转换为整数,然后尝试将该整数分配给字符。这就是为什么会导致错误的原因

char d = Integer.parseInt(“ 10”);

要消除该错误,您需要将其类型转换为char类型,即

char d =(char)Integer.parseInt(“ 10”);