JAVA基础知识笔记2:java的数据类型、数据类型转换、运算符
1.1 数据类型
1.1.1基本数据类型
boolean、byte、short、int、long、char、float、double
char型变量中能否存储一个中文汉字?为什么?
在Java中,char类型的数据类型占用两个字节(16位)的大小,因此
char类型的数值范围是0~65535
同时Java中使用16位的Unicode编码作为编码方式,Unicode编码覆盖了世界上所有书面语言的字符,因此java是支持各种语言字符的,char类型变量可以存储一个中文汉字,当然有些偏僻的汉字不可能包含在Unicode编码字符集中。
1.1.2引用数据类型
包括一般自定义的类型、接口以及数组类型等
引用类型实际上就是对一个对象的引用,它的本质还是一个指针,引用对象的实例都是在创建在堆上的
java没有指针,但java处处都是指针
1.2 数据类型转换
当一个算术运算式包含多个基本数据类型的时候,整个算术表达式的数据类型将发生自动提升(自动类型转换)
1.2.1. 自动类型转换
(1)char类型转化为高级类型的时候,会自动转换对对应的ASCll码
(2)基本数据类型与boolean类型不能相互转换
(3)任何基本类型的值与字符串进行连接的时候,基本类型的数值都会自动转换成字符串
(4)当使用扩展赋值运算符例如“+=”时不会产生自动类型转换
判断赋值语句是否正确
(a)short s1=1;s1=s1+1;
有错误s1+1的运算结果会被提升到int型,赋值给一个short型,需要强制类型转换(short),s1=(short)(s1+1)
(b)short s1=1;s1+=1;
使用+=时不会产生自动转换,逻辑上与a一样,但是其隐含的包括了强制类型转换,s1+=1等价于s1=(short)(s1+1)
表达式类型的自动提升
(1)byte、short、char类型被提升到int类型
(2)整个算术表达式的数据类型自动提升到与该表达式中最高等级操作数同样的类型
1.2.2.强制类型转换
将高级数据类型转换为低级数据类型的一种方式,可能会损失精度
不可变类:
创建了该类的实例后,该实例的值在其整个生命周期中都不能被修改
在java程序中一旦创建了String类型的实例,也就是一个字符串,该字符串的内容就无法修改了(很多时候,并不是字符串的内容发生了改变,而是引用类型变量指向的内容发生了变化)
编程实现一个不可变类
1.3运算符
1.3.1 算术运算符
'+'可以作为字符串连接运算符
'-'可以作为负号运算符
1.3.2赋值运算符
1.3.3位运算符
按位与&
按位或|
按位非~
按位异或^
左移运算符<<
右移运算符>>
无符号右移运算符>>>
需要注意的一点是,进行位运算后不会改变操作数本身,而是会得到一个新的运算结果,位运算符左边的操作数不会发生改变
1.3.4比较运算符
简述“==”和equals有什么区别
“==”
对于基本数据类型,它是比较两个变量值是否相等
对于引用类型,它其实是在比较两个引用变量是否指向同一块堆内存空间
“equals”
对于字符串类型,equals用于比较两个字符串的内容是否相等
自定义的类中没有定义equals方法,那么它将继承Object类的equals方法,作用和比较运算符==是一样的
1.3.5逻辑运算符
与&&(前面的表达式为false时,后面的表达式就不再运行了)
不短路与&
或||(前面的表达式为true时,后面的表达式就不再运行了)
不短路或|
非!
亦或^
1.3.6三目运算符
逻辑表达式?表达式1:表达式2