我的代码是
int array[] = {'a',98};
for(int num:array) {
System.out.println(num);
}
如果我打印这个,输出将是 97 98。
如果我打印 (char) num
那么输出将是 a b。
是否可能将数组打印为a 98? 我猜数组会存储数组元素的整数值,所以不可能。但是这里有什么解决方案吗?
我的代码是
int array[] = {'a',98};
for(int num:array) {
System.out.println(num);
}
如果我打印这个,输出将是 97 98。
如果我打印 (char) num
那么输出将是 a b。
是否可能将数组打印为a 98? 我猜数组会存储数组元素的整数值,所以不可能。但是这里有什么解决方案吗?
我认为使用 int[]
没有任何方法可以实现这一点。但是,您可以创建 Object[]
来实现。
以下是代码片段:
public static void main (String[] args) throws Exception {
Object array[] = {'a',98};
for(Object o : array){
System.out.println(o);
}
}
输出:
a
98
你有一个 int[] 数组
,这是字节码的样子:
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_2
1: newarray int
3: dup
4: iconst_0
5: bipush 97
7: iastore
8: dup
9: iconst_1
10: bipush 98
12: iastore
13: astore_1
14: return
}
正如你所看到的,值被插入为 int
。
其他用户建议使用 Object[] array
。看一下它的字节码:
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_2
1: anewarray #2 // class java/lang/Object
4: dup
5: iconst_0
6: bipush 97
8: invokestatic #3 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
11: aastore
12: dup
13: iconst_1
14: bipush 98
16: invokestatic #4 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
19: aastore
20: astore_1
21: return
}
注意: // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
这行代码调用了方法Character.valueOf
,因此您将获得实际的字符而不是它的int
值。
不,int[]
无法知道其数据是作为字符还是数字在源代码中被写入的。如果您希望保留这种信息,需要使用不同的数据结构。
Object[] array = { 'a', 98 }
if (array[i] instanceof Character) { // Or Integer
array[i].toString()
即可获得一个不可知的字符串表示。 - MichaelK
List
代替吗? - sidgateObject array[]
的方法是正确的,但您应该避免以这种方式混合数据类型。如果必须这样做,请将原始数据类型包装在自己的抽象数据类型中或将它们分开。 - Cloud