Использование оператора приведения типа в операторе печати

Мне трудно понять, почему следующее возвращает синтаксическую ошибку в Java:

int integer1 = 5;
System.out.print("The value of integer1 is " + (String)integer1);

Я заметил, что для обхода этой ошибки я мог бы просто создать новую переменную String, инициализированную значением приведения типа integer1:

int integer1 = 5;
String cast = (String)integer1;
System.out.print("The value of integer1 is " + cast);

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


person Brandon Sweeting    schedule 14.04.2017    source источник
comment
вы не можете использовать между строкой и целым числом. оба показанных примера не будут компилироваться. почему бы просто не использовать типы-оболочки для преобразования между строкой и целым числом?   -  person Ousmane D.    schedule 15.04.2017
comment
@ Джером, что сделано неявно? между int и string нет неявного приведения.   -  person Ousmane D.    schedule 15.04.2017
comment
вы говорите второй фрагмент работает?   -  person nandsito    schedule 15.04.2017
comment
@OusmaneMahyDiaw они, вероятно, имели в виду, что при конкатенации строк все будет преобразовано в строку, если это возможно. Это не приведение, а преобразование выполняется неявно.   -  person Novaterata    schedule 15.04.2017
comment
Когда вы спрашиваете об ошибке, вы должны вставить точное сообщение об ошибке в свой вопрос.   -  person Code-Apprentice    schedule 15.04.2017
comment
Он не скомпилировался, я не скомпилировал его перед публикацией вопроса :( Теперь я вижу, что проблема связана с разницей в типах int и String. @Code-Apprentice, я буду иметь это в виду. Я думаю он вернул ошибку несовместимых типов.   -  person Brandon Sweeting    schedule 15.04.2017


Ответы (3)


Вы можете только преобразовать примитив в другой примитив или объект в тип, экземпляром которого он является. Например, вы можете преобразовать String в объект, а int — в тип long. Если вам нужен int в строке, используйте String.format или конкатенация автоматически обработает преобразование:

System.out.print(String.format("The value of integer1 is %d", integer1));

or

System.out.print("The value of integer1 is " + integer1);

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

Integer foo = 1000;
Long bar = foo;

Вы получите ClassCastException, но

int foo = 1000;
long bar = foo;

будет работать нормально

Чтобы сделать то же самое с коробочными версиями:

Integer foo = 1000;
Long bar = foo.longValue();
person Novaterata    schedule 14.04.2017

Во втором примере вы можете сделать это вместо этого:

int integer1 = 5;
System.out.print("The value of integer1 is " + integer1);

Когда вы используете оператор + для конкатенации String с чем-либо еще, Java автоматически вызывает соответствующий метод toString() для "чего-либо еще". Это не то же самое, что приведение типа.

person Code-Apprentice    schedule 14.04.2017

Мне трудно понять, почему следующее возвращает синтаксическую ошибку в Java:

int integer1 = 5;
String cast = (String)integer1;
System.out.print("The value of integer1 is " + cast);

вы не можете преобразовать string в int или наоборот, между этими двумя типами нет никакой связи. Фактически, ни один из показанных вами примеров не скомпилируется.

если вы хотите конвертировать между двумя типами, вы можете использовать эти примеры:

Строка в целое число:

int value = Integer.valueOf("12345");

or

int value = Integer.parseInt("12345");

целое число в строку:

String value = String.valueOf(12345);

or

String value = Integer.toString(12345);
person Ousmane D.    schedule 14.04.2017
comment
Альтернативно String value = Integer.toString(12345); - person Code-Apprentice; 15.04.2017
comment
@Code-Apprentice уверен, что я тоже должен это предложить. - person Ousmane D.; 15.04.2017
comment
Является ли это обычным явлением в языках программирования, чтобы была разница в типах типов? - person Brandon Sweeting; 15.04.2017
comment
@BrandonSweeting Во всех языках программирования есть правила, регулирующие преобразование из одного типа в другой. Эти правила важно понимать для любого языка, который вы используете, потому что он сильно различается от языка к языку. - person Code-Apprentice; 15.04.2017