Java的基本数据类型定义
public class DataTpye{
public static void main(String[] args){
byte bye = 5;
short sh = 9;
int x = 5;
//定义long型数据时,要带上标志L或l,不然32568数据默认是int型
long L = 32568L;
long l = 124487l;
//定义float型数据时,要带上标志f或F,不然数据类型默认为double型
float F = 3.15F;
float f = 2.1415f;
double d = 5.12;
//浮点型的科学计数法表现形式
double dou = 5.12E2;
//单引号括起来的任意一个字符
char A = 'A';
char a = 'a';
char ch = '1';
char ch1 = '#';
//字符和ASCII码相对应,是A
char ch2 = 65;
//Unicode编码表示形式
char ch3 = '\u0000';
char cha = '\n';
}
}
Java的基本数据类型之间的类型转换
自动类型提升:
自动类型提升的转换示意图
//这里可能就有点疑问了,1是整形数据,放入byte类型中会报错的吧 //解惑:因为1的取值范围在byte在取值范围之内,所以也是可以认为是byte类型的1赋值给byte类型变量 //byte bb = 129;//编译报错:129超出了byte取值范围 byte b = 1; //与上同理: short sh = 11; //将整形数据352赋值给int型变量i int i = 352; //将整形数据1452赋值给long型变量ll long ll = 1452; //将整形数据3赋值给float型变量ff float ff= 3; //将整形数据9赋值给double型变量dd double dd = 9; byte bye = 126; //将byte类型的数据放入short类型中, //将精度小的类型放入精度大的类型中,这就是类型自动提升 short s = bye; //将short类型的数据放入int类型中, int in = s; //将int类型的数据放入long类型中, long l = in; //将long类型的数据放入float类型中, float f = l; //将float类型的数据放入double类型中, double d = f; char chh = 'a'; int CHH = chh; //数据在运算时也有类型自动提升的操作 byte y = 3; //byte 类型的y在与整形数据运算时, //类型会自动提升为整形(与什么类型的数据运算提升成什么类型的数据), //运算结果也是整形数据,然后将整形的结果赋值给int型的x变量 int x = y + 4; //面试题 short s1 = 2; //s1 = s1 +1; //报错 //解答:在short s1 = 2;没有问题,简单的赋值语句, //当运算s1 = s1 +1;时,s1会自动类型提升为整形,与整形数据1运算 //运算之后的结果为整形,赋值给short型数据。会造成精度确实而报错! //所以不能将精度达的数据放入精度小的类型变量中,否则编译报错!
总结:类型示意图从左往右是精度低的到精度高的,那么將精度低的数据放入精度高的类型中,这个叫类型自动提升,这个类型自动提升是系统底层实现的。程序员可以不做任何操作。那么讲精度高的数据放入精度低的类型变量中会编译报错!
以上面的面试题为例子,画个示意图:计算机中的运算都是以二进制的形式表现的
强制类型转换:
如果我必须要将一个精度大的数据放入精度小类型的变量中的话,那么我们就要做强制类型转换.
根据上面面试题的例子,会报错,那么需要怎么修改呢?
//面试题 short s1 = 2; s1 = (short)(s1 +1);
在赋值前面做强制类型转换,强制类型转换的格式:(type),type是我们要强制转换成的类型。更多例子:
float floa= 5f; float sunf= (float)(floa * 3.14152); long longe = (long)3.15142; int inte = 12; byte bbb = (byte)inte; //char和int型之间的转换是参照ASCII码表对应的 int ch = 97; char CH = (char)ch;