Почему бы вам не попробовать?
bash-3.2$ cat ConveraionTest.java
public class ConvertsonTest {
public static void main( String [] args ) {
char c='c';
int i=10;
double d =50;
long l=30;
String s="Goodbye";
//Are these statement valid?
s+=i;
i+=s;
c+=s;
c=c+i;
}
}
bash-3.2$ javac ConversionTest.java
ConversionTest.java:12: incompatible types
found : int
required: java.lang.String
i+=s;
^
ConversionTest.java:13: incompatible types
found : char
required: java.lang.String
c+=s;
^
ConversionTest.java:14: possible loss of precision
found : int
required: char
c=c+i;
^
3 errors
EDIT
Длинная история
По сути, все типы в java имеют «форму», если вы хотите так ее назвать (ну, я собираюсь так назвать для этого ответа)
Для примитивов типов данных (логическое, байтовое, короткое, char, int, float, long, double) «shape» - это размер в байтах, который он использует (или в битах, здесь 1 байт = 8 бит):
boolean = true or false
byte = 8 bits
short = 16 bits
char = 16 bits
int = 32 bits
float = 32 bits
long = 64 bits
double = 64 bits
«Форма» объектов варьируется в зависимости от класса.
Итак, в принципе вы можете назначить что угодно чему угодно, пока они вписываются в «форму»
Таким образом, вы можете назначить int
для long
(можно сделать 32 бита для 64-битных), короткое (16) для целого (32) и т. Д.
То, что вы не можете сделать, это назначить что-то, что не вписывается в форму.
So
ConversionTest.java:12: incompatible types
found : int
required: java.lang.String
i+=s;
^
Вы не можете присвоить String
в int
. Как бы ты? Куда пойдет содержимое? Они не имеют одинаковую «форму» и даже не совместимы.
То же самое относится к String
до char
ConversionTest.java:13: incompatible types
found : char
required: java.lang.String
c+=s;
^
Теперь вы можете присвоить int (32 бита) для символа (16 бит) или для короткого (16 бит). Проблема заключается в том, что если значение содержит> 16 бит (например, 131 071)
Вы потеряете биты, которые не вписываются в 16 бит. Вот почему вы получаете эту ошибку:
ConversionTest.java:14: possible loss of precision
found : int
required: char
c=c+i;
Однако, если вы уверены, что он подходит (например, int i = 65;
, который, безусловно, вписывается в 16 бит), вы можете привести его, вот так:
int i = 65;
char c = ( char ) i;
Приведение так, как вы говорите компилятору:
Эй, я здесь программист, я знаю, что делаю .