我们可以将整数转换为字符

hig*_*der 6 java

我们可以将字符转换为等效于相同ASCII值的整数,但是我们可以做相反的事情,即将给定的ASCII值转换为它的等价字符吗?

public String alphabets(int[] num)
{
char[] s = new char[num.length];
String str = new String();
for(int i=0; i< num.length; i++)
{   
    s[i] = 'A' + (char)(num[i]- 1);
    str += Character.toString(s[i]);
}
return str;         
}
Run Code Online (Sandbox Code Playgroud)

显示可能丢失精度错误...

Jus*_*ier 8

要转换成/来自:

int i = 65;
char c = (char)i;

char c = 'A';
int i = (int)c;
Run Code Online (Sandbox Code Playgroud)

  • @DJ,可能的精度损失不适用于ASCII字符范围. (7认同)
  • nopes,它说可能会失去精确度 (3认同)

mat*_*sev 6

该错误比您最初想象的更复杂,因为它实际上是'+'运算符导致"可能丢失精度错误".如果移动了强制转换,则可以解决该错误:

s[i] = (char)('A' + (num[i]- 1));
Run Code Online (Sandbox Code Playgroud)


说明
在第一个项目符号列表§5.6.2二元数值提升Java语言规范中指出,:

当运算符将二进制数字提升应用于一对操作数时,以下规则适用,按顺序使用扩展转换(第5.1.2节)根据需要转换操作数:

  • 如果任何操作数是引用类型,则执行拆箱转换(第5.1.8节).然后:
  • 如果任一操作数的类型为double,则另一个操作数转换为double.
  • 否则,如果任一操作数的类型为float,则另一个操作数转换为float.
  • 否则,如果任一操作数的类型为long,则另一个操作数转换为long.
  • 否则,两个操作数都将转换为int类型.

在下一个项目清单中,声明:

对某些运算符的操作数执行二进制数字提升:

  • 乘法运算符*,/和%(§15.17)
  • 数值类型的加法和减法运算符+和 - (§15.18.2)
  • 数值比较运算符,> =(§15.20.1)
  • 数字相等运算符==和!=(§15.21.1)
  • 整数位运算符&,^和| (§15.22.1)
  • 在某些情况下,条件运算符?:(§15.25)

在您的情况下,这转换为:

s[i] = (int)'A' + (int)((char)(num[i] - (int)1));
Run Code Online (Sandbox Code Playgroud)因此错误.


Boz*_*zho 5

你实际上甚至不需要演员:

char c = 126;
Run Code Online (Sandbox Code Playgroud)

这实际上似乎也适用于unicode角色.例如尝试:

 System.out.println((int) '?'); // outputs 3650, a thai symbol
 char p = 3650;
 System.out.println(p); // outputs the above symbol
Run Code Online (Sandbox Code Playgroud)