Можно ли различать символ и целое число, хранящиеся в одном и том же целочисленном массиве?
Мой код
int array[] = {'a',98};
for(int num:array) {
System.out.println(num);
}
Если я напечатаю это, я получу o/p как 97 98.
Если я напечатаю (char) num
, тогда o/p будет a b.
Можно ли печатать массив как a 98? Я предполагаю, что массив будет хранить целочисленные значения элементов массива, это невозможно. Но какое-нибудь решение здесь?
Ответы
Ответ 1
Я не думаю, что это можно сделать с помощью int[]
. Но вы можете создать Object[]
, чтобы достичь этого.
Вот фрагмент кода:
public static void main (String[] args) throws Exception {
Object array[] = {'a',98};
for(Object o : array){
System.out.println(o);
}
}
Вывод:
a
98
Ответ 2
У вас есть int[] 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: 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
.
Ответ 3
Нет, для int[]
невозможно знать, были ли его данные записаны как символ или как число в исходном коде. Вам нужна другая структура данных, если вы хотите сохранить такую информацию.
Ответ 4
Object[] array = { 'a', 98 }
if (array[i] instanceof Character) { // Or Integer