java中数据类型精度由小到大的顺序为:byte<short<int<long<float<double  (我们知道boolean,不存在精度的说法,而char类型我们单独讨论)(坚持看完,看懂这篇文章 )

知识点1:实数类型默认是double    , 整形类型默认是int

知识点2:精度小的类型自动转换精度大的类型;       

知识点3:容量大的类型转换为容量小的类型时,要加强制转换符;

知识点4:byte,short,char之间不会互相转换,并且三者在计算时首先转换为int类型;(字符‘a’=97)

知识点5:如果进行 + - * / %运算的时候,最少会被提升为int。运算符的结果只可能为以下类型
                  int < long < float < double(这就需要转换了)

举例:1:   byte a=1;    (对)

            2:   int a=1;   byte b=a;    (错)  。需要改成byte b=(byte)a;才对。

我们先不管是怎么原理,从上面的代码我们知道可以把精度转换分成2种,一种是右面是数据类型常量(3,4,5.0等)

另一种就是右面是数据类型的变量(a+1,a等),下面类详解。

(结论一):如果是数据类型变量在运算与赋值,比如 int  a=1; byte=(byte)a ,这是严格按照精度的的要求来转化的。而这种对于char类型来讲,char<int<long<float<double.   而char与byte、short  之间的赋值转换。必须强制转换。

(结论二):如果是数据类型常量在初始化,赋值。 比如 byte  a=1;  char  c=97; 而此时你会发现与知识点1与知识点3矛盾了。(按理说,1是int,赋值给byte,必须强转。而现在不用强转)。

          查找资料得知:可以这么说byte是int的子集,byte表示范围是-128-127;在这个范围内可以用整形常量(注意一定是整形常量不是整形变量)复制给byte类型的,这样做的目的就是为了节约更多的资源。

          同理可得:byte a=127   ; short  b =127  ; char c=127(只要赋的int值不超过类型的范围就不用强转,超过的话,比如byte a=(byte)128)。可能此时你会想到float  a=4.5f 或者float a=(float)4.5。答案是他们之间不存在子集的说法,所以你还是老老实实的转换吧!而byte a='a';  short  b='a';   int c='a';

          由此可知:byte short char  int   既可以赋值97   也可以赋值‘a’。而其他的按照精度表走就行了。

如有不懂或者错误之处,望朋友指出。经常在线