Java中的基本数据类型4类有8种:
整型:byte ,short,int ,long
浮点型:float,double
逻辑型:boolean
字符型:char
对应的封装类型:
整型:Byte ,Short,Integer ,Long
浮点型:Float,Double
逻辑型:Boolean
字符型:Character
类型转换要看数据的精度:
(byte,short,char)<int<long<float<double在进行赋值操作时类型转换分为隐式类型转换和显示类型转换
从高精度到低精度可以是隐式类型转换
从低精度到高精度要用显示类型转换
默认的整型是int类型,浮点型是double类型
float a=10.0是不对的要写成 float a=10.0f,但是byte a=10,和short a=10是可以的
char a=10还会转为ASCII码,其中记住几个特殊ASCII码
'0' :48 'A':65 'a':97
运算符:
Java中的运算符有三种16级
三种:单目运算符,二目运算符,三目运算符
14级:
一级:. ()
二级:++ --
三级: new
四级:* / %
五级:+ -
六级:>> << >>>
七级:> < >= <=
八级:== !=
九级:&
十级:^
十一级:!
十二级:&&
十三级:||
十四级:?:
十五级:= += -= *= /= %= ^=
十六级:&= <== >==
一般来说单目运算符的优先级大于二目运算符,二目运算符的优先级大于三目运算符
位运算符的优先级大于逻辑运算符
在运算符中数据类型的转换
前面讲了数据类型会存在由于精度不同的原因会出现类型转换的现象
如 short s=10,s=s+1; 这句话就是错误的由于s是short类型的,s+1,s是short类型,
1默认的是int 类型,进行+运算的时候,低精度会自动向高精度靠齐,所以出的运算结果是int类型的,把一个int类型赋值给short类型是需要强制类型转换的。
注意一点:在++ -- += -=等操作的时候会自动进行类型强制转换
如:short s=10,s+=1;这句话就是对的了,因为+=运算符自动进行了类型强制转换。
在二目运算符或者三目运算中,存在不同类型的数据,最终的运算结果会向高精度靠齐,数据类型的精度问题前面也已经提过了。
注意:
如果表达式中存在常量的话就有点变化
如:
int b=10,char a='x';
(1)false?b:a;
(2)false?10:a;
第一个表达式输出是120(x的ASCII码),第二个表达式输出是'x'
第一个表达式的原理和上面说的一样,由于b是int类型,而a是char 类型
a的精度比b 的底,所以a会被提升到int 类型
第二个表达式中,由于10是一个常量,根据Java的编码规范,如果一个表达式是一个
常量表达式(即10)运算符中的另一个表达式T如果能被常量表达式类型表示(即char 能表示为int型)时,那么另一个表达式不用变。所以输出为'x'
还有注意的:
int a=50;
Integer b=50;
Integer c=Integer.valueOf(50)
这三个对象a,b,c是指向同一个对象
即a==b==c
这是由于在Java虚拟机加载的时候就把-128-127(也就是一个byte)的数存在内存中,
所有直接使用这个些数的都是指向内存中的同一个对象
想要一个新的对象就需要用new,即Integer d=new Integer(50);