Java--类型提升&运算符

1.类型转换

小类型到大类型-->隐式提升,自动转换(不需要我们额外处理,编译器会自动帮我们进行类型转换)。

1)将小类型的变量赋值给大类型的变量,编译器自动提示小类型的变量类型。

2)当小数据类型与大数据类型进行数学运算时,也会进行类型的隐式提升。在小数据类型和大数据类型进行数学运算时,会自动将小数据类型先提升为大数据类型而后进行计算。(隐式提升)

大类型到小类型-->要强制类型转换,且有可能要丢失精度

Java--类型提升&运算符_第1张图片

 PS:毫无关系的两个类型无法进行转换 Java--类型提升&运算符_第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中任意的字符串和任意其它类型+,都会将其他类型转为字符串,再进行字符串的拼接操作。Java--类型提升&运算符_第3张图片

PS:Java中字符串是一个特殊处理过的类型。 

方式一:int+任意字符串(包括空字符串“”),都会转为字符串String。

方式二:使用Strng的valueOf方法。Java--类型提升&运算符_第4张图片

 2)String-->int(有风险,类型转换异常,String有可能包含非整型)

“123456789”—>虽然是字符串类型,但是是由纯数字组成,因此称为数字字符串,可以转为int。调用整型的包装类方法转为int。

Java--类型提升&运算符_第5张图片

 PS:若字符串中包含数字之外的字符时,转为int时就会抛出异常。Java--类型提升&运算符_第6张图片

2.运算符

PS:java中的包,其实就是文件夹。包==文件夹,将不同的类放在不同的文件夹中,就可以更方便的管理和查找类。包的命名采用全小写,多个单词采用_分隔。

Java--类型提升&运算符_第7张图片

(1) 相关运算:

Java--类型提升&运算符_第8张图片

 PS:进行除法和取模运算时,被操作数不能为0。否则会抛出一个运行时异常,即编译时没错,再运行阶段出的异常。取模运算也能对小数运算,但一般都是对整数取模。Java--类型提升&运算符_第9张图片

 (2)

1》增量运算符:+=、-=、*=、/=、%=

使用增量运算符的语句,在执行结束后,将运算结果赋值给左边变量。eg:Java--类型提升&运算符_第10张图片

2》自增/自减运算符:++、--

前置自增:先取值再++。后置自增:先++再取值。eg:Java--类型提升&运算符_第11张图片

 (3)关系运算符==、!=、<、>、<=、>=运算值的结果是一个布尔类型(要么true要么false)

Java--类型提升&运算符_第12张图片

 PS:在Java中不能出现多次判断,不能连着写。eg:

 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:

Java--类型提升&运算符_第13张图片

 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:运算符存在优先级,可以将优先进行运算的用()括起来即可。(如算术运算符的优先级高于移位运算符)

你可能感兴趣的:(java,学习)