Допустимые операции Java с целыми числами и символами - PullRequest
1 голос
/ 20 сентября 2011

Итак, следующее:

char x = 88;

int number = 8 + 'E';

char x = 'a' + 8;

Правильны ли операции Java?

'Потому что мой учитель Java говорит, что ТОЛЬКО символы, заключенные в одинарные кавычки, являются законными для char, и у меня завтра тест, поэтому я хочу убедиться, что я прав, а она - нет " не поймите меня неправильно.

Кроме того, я попытался поиграться с int и такими вещами, как int x = 40 + 'a' и char x = 5 + 'd', и все они дают предсказанные результаты (если я обращаюсь к диаграмме ASCII) без каких-либо ошибок.

Ответы [ 5 ]

1 голос
/ 20 сентября 2011

char в int преобразование называется widening conversions.При расширении преобразований значения не теряют информацию об общей величине числового значения, где преобразование от int до char называется narrowing conversions.При сужающемся преобразовании вы можете потерять информацию об общей величине числового значения, а также потерять точность.

Для получения дополнительной информации о примитивных преобразованиях см. этот документ.

0 голосов
/ 20 сентября 2011

Как уже говорили другие, то, что является законным и что является хорошей идеей, не всегда одинаково.

char ch = '0';
ch *= 1.1;
// ch == '4'

Следите за бесконечными циклами

for(char ch = Character.MIN_VALUE; ch <= Character.MAX_VALUE; ch++) // infinite loop

Еще одна вещь, которую вы можете сделатьс символами, которые сомнительны, это преобразование прямо из байта [] в строку.

byte[] bytes = 
String text = new String(bytes, 0);

Это работает для текста ASCII-7, но не должно использоваться вообще.

0 голосов
/ 20 сентября 2011

«char», «int», «byte», «short» или «long» - это всего лишь названия для вещей, которые объединяют несколько битов.Вместе они известны как целочисленные типы .

Аналогично, все это буквальные значения, которые Java знает, как представлять в виде набора битов: 0, '0', 1, '0', -1, 2147483647, 'a', 'A', '~', ... Вы получите картинку.И из вашего вопроса я почти уверен, что вы уже знаете, что 0 и «0» - это не одно и то же.целочисленные типы, хотя иногда вам нужно заставить их соответствовать (например, byte b = (byte) i, где i - int), и вы можете потерять некоторые биты, которые составляют значения, когда вы их форсируете.

Так что да, все перечисленные вами операции действительны, потому что вы просто комбинируете разные целочисленные литералы по-разному и присваиваете их целочисленному типу.

PS Если вы новичок в Java, донане пытайтесь читать слишком много по этой ссылке "целых типов" сразу, иначе ваша голова может взорваться.

0 голосов
/ 20 сентября 2011

Если это действительно то, что сказал ваш учитель, она неверна, и вы должны быть в состоянии написать программу, которая доказывает это.

Однако не рекомендуется использовать целочисленные литералы в качестве символьных значений.потому что это скрывает смысл вашей программы.(Возможно, это то, что она говорила, и вы ее неправильно поняли.)

0 голосов
/ 20 сентября 2011

Да, вы можете использовать / присваивать как целочисленное (ASCII) значение, так и сам символ переменной char.Одно и то же значение в конечном итоге присваивается переменной.

Но ваш учитель может просто попытаться предложить вам рекомендацию , в которой использование символов вместо значений ASCII гораздо более читабельно.

...