我的代码是Java。我有一个char
数组,其值int
和char
值。当我打印时,我得到与ASCII相关的值。但是当我将输出转换为int
时,我的字符值会更改为其ASCII值。
char arr[]=new char [5];
for(int i=0;i<5;i++)
{
arr[i]=(char)(i+1);
}
arr[0]='@';
for(int i=0;i<5;i++)
{
System.out.println(arr[i]);
}
或转换为int
:
for(int i=0;i<5;i++)
{
System.out.println((int)arr[i]);
}
我的输出是
64 2 3 4 5
或
@
取决于我使用的代码。但是,我希望输出为
@ 2 3 4 5
我尝试使用方法重载来分隔整数和字符,但这没有用。
下面的int
是否有条件?
if(arr[i]==int)
代码不起作用,但有些东西与它或任何其他解决方案相似吗?
答案 0 :(得分:3)
它不起作用,因为就Java而言,char
原语只是一个16位无符号整数值。为了证明:
System.out.println('A' == 65); // prints true
解决此问题的一种方法是声明一个对象数组,并依赖auto-boxing让Java自动将原始值转换为Integer
或Character
包装器对象:< / p>
Object arr[] = new Object[2];
arr[0] = '@'; // stores '@' as a Character wrapper object
arr[1] = 1; // stores 1 as an Integer wrapper object
for (Object o : arr) {
System.out.println(o);
}
与基元不同,包装器对象知道它们的类型,因此打印出来:
@ // by calling Character.toString()
1 // by calling Integer.toString()
请注意,在此过程中会丢失一些编译时检查。您的对象数组不仅会接受Character
和Integer
值,还会接受任何其他值。
答案 1 :(得分:0)
罗比是非常正确的!但是,如果您只是在寻找快速转换ints和chars的hack,您可以利用ASCII值并在这种情况下使用偏移量(48),这是char '0'
的值,然后用它来转换两种基本类型。所以我使用一个数组来保存生成的整数以便输出。
public class Hack{
public static void main(String []args){
char arr[]=new char [5];
int offset = 48;
for(int i=0;i<5;i++)
{
arr[i]=(char)(i+1 + offset);
}
//arr[0]='@';
for(int i=0;i<5;i++)
{
System.out.println(arr[i]);
}
int num_arr[] = new int [5];
for(int i=0;i<5;i++)
{
num_arr[i]= ( arr[i] - offset);
}
System.out.println("\n");
for(int i=0;i<5;i++)
{
System.out.println(num_arr[i]);
}
}
}
输出:
1
2
3
4
5
1
2
3
4
5