float f = 10.0; // error
float f = 10.0f; // ok
10.0的默认类型是double,double赋值给float,当然不行。
再看:
char c = 10; // ok
byte b = 10; // ok
short s = 10; // ok
int i = 10; // ok
10的默认类型是int,int赋值给char,byte,short,为什么就可以呢?
在java中10这个常量到底是怎么存放的呢?和String类型的常量(例如“hello”)是一样的吗?
是数字的整型常量都存为32位整型吗?
float f = 10.0f; // ok
10.0的默认类型是double,double赋值给float,当然不行。
再看:
char c = 10; // ok
byte b = 10; // ok
short s = 10; // ok
int i = 10; // ok
10的默认类型是int,int赋值给char,byte,short,为什么就可以呢?
在java中10这个常量到底是怎么存放的呢?和String类型的常量(例如“hello”)是一样的吗?
是数字的整型常量都存为32位整型吗?
byte 为1字节 -128~127
short为2字节 -32,768~32,767
int为4字节 -2,147,483,648~2,147,483,647
long 为8字节 -9,223,372,036,854,775,808L~9,223,372,036,854,775,807L
而char为2字节 0~65535
char c = 10; // ok
byte b = 10; // ok
short s = 10; // ok
int i = 10; // ok
正确的原因倒不是因为整数不整数,是因为10在编译阶段就是确定的,编译器可以对它进行范围检查,所以如果char c = 300就会编译阶段报错。
如果这样:
int i = 10;
char c = i;
虽然范围也是正确的,但是编译器会报错。
a += 1;
a = a+1;好像是这样的,问那段代码出错
jvm会隐式的进行强转,在强转之前要检查所赋值的范围,要是在范围之内,就不报错。
后面的数值常量在 -2^15 ~ -128 & 127 ~ 2^15 - 1 范围内类型为short
c=c+10;//error char=char+int
c+=10; //ok += 相当于初始化
byte b=10;//ok 这是给b初始化一个值
b=b+10;//error byte=byte+int
b+=10;//ok += 相当于初始化
short s=10;//ok 这是给s初始化一个值
s=s+10;//error shor=shor+int
s+=10;//ok += 相当于初始化
int i=10;//ok 这是给i初始化一个值
i=i+10;//ok int=int+int
i+=10;//ok