【问题标题】:Java cast int to char doesn't workJava将int转换为char不起作用
【发布时间】:2016-05-21 14:53:30
【问题描述】:

我在 Win7 Pro 上使用 Java 7 SE 并且遇到了这个问题: 将 int 转换为 char 无法正常工作。

怎么了?

谢谢。

int oneInt = 1;
char oneChar = '1';

// prints false
System.out.println((char) oneInt == oneChar);

// prints this symbol 
oneChar = (char) 1;
System.out.println(oneChar);

// Works - it prints 1 
oneChar = (1 + "").charAt(0);
System.out.println(oneChar);

【问题讨论】:

  • 没什么错,就是叫ASCII brah
  • (int) '1' 根据 ASCII 表是 49,你期望 (int) '$' 是什么?
  • 我对此感到困惑,不知道表达式 (char) intVal(int) charVal 分别相当于 AscW(intVal) ChrW(charVal) 例如在VB中。现在很清楚,如下所述。

标签: java casting char int


【解决方案1】:

您可以考虑使用一些内置在标准 Java 库中的静态方法。

例如,Integer.parseInt(String s) 将获取字符串 s 并尝试将其转换为整数。所以 Integer.parseInt("5") 将返回 5 作为整数。

String.valueOf(int i) 会将整数转换为其等效的字符串。所以 String.valueOf(10) 将返回 "10" 作为字符串。

如果您实际上使用的是字符而不仅仅是字符串,这可能会有所帮助:https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html

有 getNumericValue 和 isDigit 等方法。不确定这是否正是您要查找的内容,但它可能比使用幻数(例如加 48)来获得您要查找的字符更清晰。

【讨论】:

  • 在这种特殊情况下,我要求的是相反的方向:int -> char。如果我必须使用 String,我更喜欢oneChar = (1 + "").charAt(0);。 resueman 的上述解决方案oneChar = (char)(1 + '0'); 虽然更短。要将 int 转换为 String,我通常会使用例如tenStr = 10 + ""; 因为它很短。不过不知道有没有缺点?
  • 好吧,如果您使用的是字符串,我建议您使用 String.valueOf,因为它会为您处理转换并且(我认为)更符合 Java 的习惯。在oneChar = (1 + "").charAt(0)` 的情况下,我认为实际发生的情况是当空字符串 ("") 连接到它时,int 1 被转换为字符串。然后,您将专门解析 String 的第一个字符(基本上是一个 char 数组)。问题是你必须知道你想要的数字中有多少位,这会导致代码脆弱。
猜你喜欢
  • 2013-08-01
  • 2014-05-02
  • 2013-12-11
  • 2015-09-27
  • 2019-04-05
  • 2019-03-15
  • 2012-08-07
相关资源
最近更新 更多