Java中的基本数据类型以及自增特性总结
Java中的数据类型:
- 计算机中的数据的存储方式是二进制,并且相应数据类型的最高位为转换十进制数的符号位,1为负数,0为正数;
- 浮点型数据的取值范围是根据IEEE754标准获得的;
- 在Java中Float.MIN_VALUE表示的是浮点型数据的可表达的最小正数,Double.MIN_VALUE也是如此,所以在0~Float.MIN_VALUE的范围的数,float数值类型取不到; 一种解释是,通过 — Float.MAX_VALUE 就能获得单精度浮点型数据的最小值,所以采用Float.MIN_VALUE来表示更有意义的数值。
Java中的基本数据类型转换:
分为两种: 自动类型转换、强制类型转换
- 自动类型转换
- 当小数转换为大数时,可以自动转换,例如:
byte a=126; int b=a; //此时byte类型的数据可以自动转换为int类型
2. 大数、小数指的是这种数值类型所能表示的数值范围,并不是占用的字节数;
3. 数值类型的大小数关系 (byte、char、short)<int<long<float<double;
4. byte、char、short三种数据类型是平级的,除了byte可以自动转化为short之外,其余两者转换需要强转;
5.当short类型、byte类型、char类型的操作数进行运算操作时,会将其转化为int类型的数据进行运算,并生成int类型的数据,例如:
byte b=12; short c=b; char d='f'; short e=b+c-d;//Type mismatch: cannot convert from int to short
上述代码最后一行将编译错误,通过提示可知byte、short、char类型的数据进行数值操作时会先转化为int类型数值,然后进行运算,并且生成int类型的数据,但是不会改变原来的操作数的数值类型.
- 强制类型转换
-
-
- 将大数转换为小数时需要强制类型转换,这会由于大数占用的位数多,而小数占用的位数少导致溢出,溢出时会截断,不是取小数类型的最大值,例如大数是64位的long类型转换为int32位的小数,则会取63位中的低31位二进制数,最高位为符号位。
Java中的“++”自增
如下代码:
public class SelfAddTest { static int x,y; public static void main(String args[]){ x++; myMethod(); System.out.println(x+y+ ++x); } private static void myMethod() { y=x++ + ++x; } }
上述代码执行后控制台打印的是多少呢?
- 首先要理解i++、++i区别,i++是先返回i值然后再执行+1操作,++i是先+1再返回i的值;
- 然后是理解 y=x++;
y=x++; //可以分解为如下三步; int temp=x; x=x+1; y=temp;
3. 所以当执行 y=x++ + ++x时;相当于在操作栈中先存入1,然后执行+1,此时x=2;然后执行++x;此时x=3并将3压入操作栈;所以y=1+3;
4. 所以控制太输出的结果是11;
5. 然后是++x的操作可以分解为:
//y=++x 等效于: x=x+1; int temp=x; y=temp;
理解了上述++i和i++的区别也就容易得到如下代码的输出了:
int i=0; i=i++; i=++i; System.out.println(i); //1
"i++"、 "i+=1"和"i=i+1"的区别
- "i++"、 "i+=1"都隐含强制类型转换;
- i=i+1 没有强制类型转换,因为其中的1是默认的int类型,如果i是小数,例如 byte类型,则该代码将编译错误。