1.类型转换
小类型到大类型-->隐式提升,自动转换(不需要我们额外处理,编译器会自动帮我们进行类型转换)。
1)将小类型的变量赋值给大类型的变量,编译器自动提示小类型的变量类型。
2)当小数据类型与大数据类型进行数学运算时,也会进行类型的隐式提升。在小数据类型和大数据类型进行数学运算时,会自动将小数据类型先提升为大数据类型而后进行计算。(隐式提升)
大类型到小类型-->要强制类型转换,且有可能要丢失精度
PS:关于4字节以下的数据类型的保存问题(boolean除外):
在Java内部保存数据类型时,都是以4字节为基础保存的,将小于4字节的数据类型向默认提升为整型然后再保存。
1)当整型字面量赋值给byte类型时,若字面量赋值再byte范围内时,可以直接赋值,不需要强转(存储时会将byte转为int存储)。
2)当将byte变量赋值给byte时需要强转。
PS:char和int类型之间的相互转换:
char-->int:直接隐式转换。小类型->大类型自动提升
字符编码:在计算机看来,所有的数据类型都不存在,计算机在内部存储数据时只知道二进制的0、1。字符在存储时,是拿正数存储的,因此需要一个对应关系,每个不同的字符按照一定的规则转为整数,这种规则就叫做‘编码’。每一个独立不同字符都对应一个整数,这个对应关系就是编码。Java采用的时Unicode编码,16进制编码(16bit)2字节,支持将地球上所有语言转为数字。
PS:String<-->int(时俩完全不同的类型,不是强转):
1)int-->String:
Java中任意的字符串和任意其它类型+,都会将其他类型转为字符串,再进行字符串的拼接操作。
PS:Java中字符串是一个特殊处理过的类型。
方式一:int+任意字符串(包括空字符串“”),都会转为字符串String。
2)String-->int(有风险,类型转换异常,String有可能包含非整型)
“123456789”—>虽然是字符串类型,但是是由纯数字组成,因此称为数字字符串,可以转为int。调用整型的包装类方法转为int。
PS:若字符串中包含数字之外的字符时,转为int时就会抛出异常。
2.运算符
PS:java中的包,其实就是文件夹。包==文件夹,将不同的类放在不同的文件夹中,就可以更方便的管理和查找类。包的命名采用全小写,多个单词采用_分隔。
(1) 相关运算:
PS:进行除法和取模运算时,被操作数不能为0。否则会抛出一个运行时异常,即编译时没错,再运行阶段出的异常。取模运算也能对小数运算,但一般都是对整数取模。
(2)
1》增量运算符:+=、-=、*=、/=、%=
使用增量运算符的语句,在执行结束后,将运算结果赋值给左边变量。eg:
2》自增/自减运算符:++、--
(3)关系运算符==、!=、<、>、<=、>=,运算值的结果是一个布尔类型(要么true要么false)
PS:如果关系运算符的类型不同(如一个Int型一个double型、一个char型一个double型),都可以比较,都是数值型。
(4)逻辑运算:&&、||、!,运算结果都是布尔型,参与运算的表达式也必须返回布尔型。所有参与运算的表达式都必须为布尔表达式。
逻辑与&&:多个表达式都为true结果才是true,有一个false结果就是false。
逻辑或||:多个表达式都为false结果才是false,有一个true结果就是true。
逻辑非!:对当前表达式取反操作。
PS:短路运算符:对于逻辑与操作符&&,当碰到表达式中有一个返回false,最终结果直接返回false,剩下的表达式就不再接着进行判断。对于逻辑或||,当碰到表达式中有一个返回true,最终结果直接返回true,剩下的表达式就不再接着进行判断。
(5)位运算符:在比特位上进行操作的运算符&、|、^、~
按位与&:两个二进位制都是1,返回1,否则就是0。
按位或|:两个二进位制都是0,返回0,否则就是1。
按位异或^:两个二进位制不相同返回1,否则返回0。
按位取反:该位为0,转为1,反之则反。
eg:
PS:可以使用异或发现一组数中不一样的数
PS:在Java中表示不同的进制数:
二进制使用0b开头:eg: 0b10--->表示二进制的10实际输出2。
八进制使用0开头: eg:010--->表示八进制的10实际输出8。
十六进制以0x开头: eg:0x10--->表示十六进制的10实际输出16。0xf--->实际的15。
(6)移位运算符:<<、>>、>>>(无符号右移),在Java中没有无符号左移。
左移:<<,左侧位不要了,右侧补0。正整数左移一位相当于*2。
eg:10<<1相当于*2 --> 10100=2^4+2^2 =20。
PS:位运算符的速度要快于算数运算符,以后进行乘或除操作时,若是恰好*2或/2,可以考虑是由位运算符。eg:x<<1=x*2。
右移:>>,最右侧位不要,左边补0(正数补0,负数补1)
eg:10>>1相当于/2 -->0101=5。
PS:正整数右移一位相当于/2。
(7)条件运算符:表达式1?表达式2:表达式3,是唯一的一个三目运算符。
当表达式1为true,整个表达式取表达式2的值。当表达式1为false,整个表达式取表达式3的值。
PS:表达式2与3要是同类型的,或者能发生隐式类型转换的。(但是为了避免歧义,表达式2与3一般要求都是相同的数据类型)
PS:运算符存在优先级,可以将优先进行运算的用()括起来即可。(如算术运算符的优先级高于移位运算符)