整型: (整型的默认类型为int)
定义long型变量,值的末尾加上“L”或“l”,如long m=3.55L;
byte(-128~127) 1字节 位bit 1字节=8bit
short(-2^15~2^15-1) 2字节
int(-2^31~2^31-1) 4字节
long(-2^63~2^63-1) 8字节
浮点型:(浮点型的默认类型为double)
定义float型变量,值的末尾加上“F”或“f”,如float f=4.2F;
float 4字节
double 8字节
字符型(=2个字节):char只能表示一个字符(英文、中文、标点符号等)
char c1='a';
char c2='好';
char c3='\t'; 可以表示转义字符
布尔类型:boolean 只能够取值为true或false。不能取null。
2.引用数据类型(类、接口、数组):如String类。
二.类型转换
1.自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动转换为容量大的数据类型。
char,byte,short ===> int ===> long ===> float ===> double
当char\byte\short之间做运算时,默认的结果为int类型 比如 short+byte , char+byte , short+short 等结果都为int。
2.强制类型转换:可以将容量大的数据类型转换为容量小的,要使用强制类型转换符:(type)
强制类型转换的问题:可能会导致精度的损失。
三.运算符和变量间的运算
1.算数运算符:+(正) -(负) +(加) -(减) *(乘) /(除) %(取模) ++(自增) --(自减) +(字符串连接)
取模的结果取决与被模数,被模数为正,则结果为正,被模数为负,结果为负。
++(自增)有前++和后++之分,前++就是先自增后使用,后++就是先使用后自增,比如:
int i=5; int j=5; int k=++i; int l=j++; //最后输出的话,i、j和k的值为6,l的值为5。
同理自减也一样。
由于有自动类型转换的问题,所以如下代码会出现编译错误:
short s=1; s=s+1; //原因:因为s+1自动转换为int型,int到short会损失精度,出现编译错误。
(+)字符串连接:
如果一个运算中包含字符串,其结果也肯定为一个字符串,如下:
当"abc"+3+5时,其结果为"abc35"的字符串,但当3+5+"abc"时其结果为"8abc"的一个的字符串。
区分'a'+3+'b'和"a"+3+"b":第一个结果为int类型,第二个结果为String类型。
2.赋值运算符:= += -= *= /= %= (要区分=(赋值)和==(等于)的区别)
由于有自动类型转换,所以上述 short s=1; s=s+1; 的代码会出现编译错误。
而当 short s=1; s+=1; 的时候就不会报错。 原因:+=不会改变s的数据类型。
+= -= *= /= %= 都不改变左边数据的数据类型。比如 int i=1; i*=0.1; 结果i=0 原因:i为int类型,i*=0.1不改变i的类型,所以就相当于i=(int)(i*0.1),所以结果为0。
3.关系运算符:== != < > >= <= instanceof(检查是否是类的对象)
"ABC" instanceof String,就是表示 字符串ABC 是否为 String 类的对象。
关系运算符最终的结果都是boolean类型,只能是true或者是false。
4.逻辑运算符:&(逻辑与) &&(短路与) |(逻辑或) ||(短路或) !(逻辑非) ^(抑或)
逻辑运算符要求运算符两端都为boolean类型的值,其结果为true或false,所以判断a是否在1到3之间不能写成1<a<3,因为1<a只能是true或者是false,然后就不能与3比较;应该写成a>1&&a<3。
&与&&的区别:&:不管左边是true还是false,右端都会进行运算。
&&:当左端为false时,右端不再进行运算。
使用时,通常使用&&。
|与||的区别: |:当左端为true时,右端照样做运算。
||:当左端为true时,右端不再进行运算。
使用时,通常使用||。
^:两边的boolean值相反结果为true。
5.位运算符:<<(左移) >>(有符号右移) >>>(无符号) &(与) |(或) ^(抑或) ~(反码)
位运算符是对二进制数进行运算。位运算符两端都是数值型的数据。
<<左移几位就相当于×2^左移位数 ,当左移位数过多时,数据会出错,可能将整数变成负数。
有符号右移和无符号右移时当数为正数时,结果相同。
当数为负数时,>>有符号右移几位,左边就补几个1,>>>无符号右移几位,左边就补几个0。
&与,当两个数的二进制数的同一位都为1时,结果为1,否则为0。
|或,当两个数的二进制数的同一位中某一位为1时结果为1,如果都为0,结果为0。
^抑或,当两个数的二进制数的同一位相抑时,结果为1,否则结果为0。
~取反,一个数字的二进制数的每一位都取反。0变1,1变0。
可以通过位运算手动的将十进制数转换为十六进制数输出。比如:00001111代表的数为15,将其与任一一个int型进行^操作,都能得到该数的二进制数的低四位,可以将其转换为十六进制数。再将该int型数进行>>4的操作后与15进行^操作可以得到该int数的二进制数的5-8位,将其转换为十六进制数,依此直到完全将其转换。
也可以通过^运算交换两个数的位置。理由:(m^n)^m=n (m^n)^n=m
6.三元运算符:(条件表达式)?表达式1:表达式2; 为真,取表达式1;为假,取表达式2。
要求:表达式1与表达式2为同种数据类型。既然是运算符,就一定会有运算的结果,结果的数据类型与表达式1,2的类型一致。
三元运算符在一定程度上可以与if-else互换。(三元运算符一定可以转换为if-else,反之不一定成立。)
可以通过三元运算符求出两个数的最大值等。