Java语言基础
一、数据类型
在Java中数据类型分为基本数据类型和引用数据类型。8种基本数据类型如下所示:
(1)整数类型
整形数据有3种表示形式,分别为八进制、十进制、十六进制。
十进制:不能以0作为十进制的开头(0除外);
八进制:八进制必须以0开头;
十六进制:十六进制必须以0x或0X开头。
二进制:二进制以0b开头(jdk1.7开始)。
整数直接量默认为int型,不能超范围,否则会编译错误;两个整数相除,结果还是整数,小数位无条件舍弃;运算时超出范围会发生溢出,溢出是需要避免的;
(2)浮点类型
默认情况下小数都被看作是double型,若使用float型则需在小数后面添加F或f。
精确运算场合不能使用double和float而要使用BigDecimal。
常考问题:
(3)字符类型
采用Unicode编码(unicode编码单元可以表示为十六进制值,\u000-\ufff),每个字符(char)都有一个对应的码(int);表现形式为char字符,实质上是int码;字符必须放在单引号中,有且仅有一个;特殊符号需通过\来转义。
unicode/utf-8/utf-16区别:其实Unicode涉及到两个步骤,首先是给所有的字符指定一个唯一对应的数字(Unicode是用0至65535之间的数字来表示所有字符).第二步才是怎么把字符对应的数字以二进制保存在计算机中,于是就有utf-8/utf-16.
UTF-16比较好理解,就是任何字符对应的数字都用两个字节来保存.当用UTF-8来表示一个字符时是可变的,有可能是用一个字节表示一个字符,也可能是两个,三个。
(4)布尔类型
Boolean只有true和false两个值。整型值与布尔值之间不能进行相互转换。
(5)基本类型间的转换
类型从小到大依次为:
byte,short,int,long,float,double
char
注意:long是8个字节,float是4个字节。但整数和浮点数的存储规则不一样,long的范围是小于float的。
1)两种方式:
1.1)自动类型转换:从小类型到大类型
1.2)强制类型转换:从大类型到小类型,强转有可能会溢出和精度丢失
2)两点规则:
2.1)整数直接量可以直接赋值给byte,short,char,但不能超范围
2.2)byte,short,char型变量参与运算时,先一律转为int再运算
基本数据类型之间的转换(必看,经常容易考到):
http://blog.csdn.net/sky_ground/article/details/49738761
3)8种基本类型取值范围和占用内存如下:
二、常量与变量
在程序执行过程中,其值不能被改变的称为常量,其值能被改变的称为变量。常量与变量的命名必须使用合法的标识符。命名规则为:只能包含字母、数字、_和$符,并且不能以数字开头;严格区分大小写;不能使用关键字;可以中文命名,但不建议,建议"见名知意"、"驼峰命名法"。常量通过final关键字进行限定,常量必须声明的同时初始化。
三、运算符
Java中的运算符可以分为以下几组:
算术运算符,关系运算符,逻辑运算符,赋值运算符,位运算符,其它运算符。
(1)赋值运算符(=,+=,-=,*=,/=,%=)
赋值运算符处理时会先取得右方表达式的结果,因此如果有多个赋值运算会从最右方的“=”开始处理。
(2)算术运算符(+,-,*,/,%,++,--)
整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN(0.0/0)结果.
(3)关系运算符(<、>、==、!=、>=、<=)
(4)逻辑运算符(&&、||、!)
逻辑运算是建立在关系运算基础之上的,逻辑运算的结果也是boolean型。&&为短路与,如果左边表达式为假时不会去判断右边的表达式,非短路与(&)会始终执行两边的表达式。
(5)位运算符
“按位与”(&):双目运算符,如果两个整型数据对应位都是1,则结果位才是 1, 否则为0.
“按位或”(|):双目运算符,如果两个操作数对应位都是0,则结果位才是0,否则为1.
“按位取反”(~):单目运算符,就是将操作数二进制中的1修改为0,0修改为1.
“按位异或”(^):双目运算符,当两个操作数的二进制表示相同时(同为0或者同为1),结果为0,否则为1.
位移操作:
<<:左移,一个数左移n位,可以实现乘以2^n
>>:右移,一个数右移n位,可以实现除以2^n
>>>:无符号右移
(6)其他
字符串拼接:+
三目运算符:boolean?数1:数2
(7)运算符优先级如图: