一起显示字符和整数

时间:2017-03-23 03:34:50

标签: java type-conversion

我的代码是Java。我有一个char数组,其值intchar值。当我打印时,我得到与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)

代码不起作用,但有些东西与它或任何其他解决方案相似吗?

2 个答案:

答案 0 :(得分:3)

它不起作用,因为就Java而言,char原语只是一个16位无符号整数值。为了证明:

System.out.println('A' == 65); // prints true

解决此问题的一种方法是声明一个对象数组,并依赖auto-boxing让Java自动将原始值转换为IntegerCharacter包装器对象:< / 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()

请注意,在此过程中会丢失一些编译时检查。您的对象数组不仅会接受CharacterInteger值,还会接受任何其他值。

答案 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