java基本类型
首先明确java基本类型有:int(4个字节) long(8个字节) short(2个字节) boolean(1/8个字节) char(2个字节) float(4个字节) double(8个字节),关于各个类型的取值范围的计算:每个字节在计算机中用8位二进制的数表示,最高位也就是第一个数字代表符号,0代表正数,1代表负数,所以以整型为例4个字节 ,32位数字表示,所以最大值二进制表示为1 1111111111111111111111111111111 第一位表示符号的不算,后面的十进制表示为2^31-1=2,147,483,647,最小值的计算麻烦些当最高位是0时,处最高位取反数然后计算最后加上1再取负值既是,同样int 此时最高位是0最小值那么后面的值绝对值应该是最大的,由于中间要取反值所以最小值的二进制的表示为0 00000000000000000000000000000 ,除最高位0外取反值111111111111111111111111111111111除最高位0外加1得10000000000000000000000000000000
计算得2^31=2,147,483,648 所以最小值是-2,147,483,648。其余的类型也是如此写只是有些还要根据实际比如char类型取值范围指的是Unicode没有负值。
类型转换基本遵循从小的取值范围向大的可以直接自动转换,大的转小的必须强制转换,比如float a=1.2;在程序中报错是因为小数默认是double型的,而double的
取值范围比float大无法自动转换只能写成float a=(float)1.2;对于整数默认是int型的 但是有个问题就是 short i=2 以及long=2和int 等于2都是对的但是如果超出取值范围是会报错的比如short i=222222; 我个人理解对于longshortint型数字可能默认省略了关键后缀根据前面的类型而定比如long a=2;可能是省略了2L;对于相同取值范围的有int float
,char short,int类型的可自动转换到float 反之不行而char short 是可以相互自动转化的。char ch=65; //ch为A short K='a'; // k为97,boolean 变量不参与转化。
下个博客会研究java的运算符作为个过渡学习学习不同类型的数值在运算时结果的类型是如何决定的比如 1+1.2的结果是什么类型的 遵循这样的原则有double 优先是double类型的,有float优先 是float 有int优先是int 比如(1.2+1)是2.2double类型的,1+'A'是66.