今日重点:1,数据类型的定义,数据类型之间的转换,可能会有面试题

         2,逻辑运算符如何运算,&和&&的区别


         3,记住二进制知道怎么回事就行了,不要把大部分时间用在进制之间的转换上,以后用的特别的少,讲它


(1)是为了让大家对这方面的知识有所了解


            (2)可以把类型转换损失精度解释清楚




1:变量


(1)在程序的运行过程中,其值在指定范围内变化的值


(2)是内存中一个区域,用于存储数据


(3)变量的定义格式:


A:数据类型 变量名 = 初始化值;


(4)变量在使用的时候


A:第一种,在声明的时候,就初始化值


**数据类型 变量名 = 初始化值;


**举例:byte b = 100; System.out.println(b);


B:第二种 在使用前,赋值


**声明


**赋值


**使用


**举例 byte b2;


      b2 = 100; System.out.println(b2);


2:数据类型


(1)java语言分为两种数据类型


A:基本数据类型


B:引用数据类型(类,接口,数组)


(2)基本数据类型


A:区别 在内存中分配的空间大小不同,从而导致它表示的数据范围不同


B:4类8种


**整数


***byte 占1个字节


***short 占2个字节


***int 占4个字节


***long 占8个字节 其后加L或l标识


**浮点数


***float 占4个字节 其后加F或f标识


***double 占8个字节


**字符


***char 占2个字节


**布尔型


***boolean This data type represents one bit of information, 


***but its "size" isn't something that's precisely defined.


***这个数据类型代表一个比特的信息,但它的“大小”不是精确定义的东西. 


***true,false


C:默认情况下:


**整数是int类型


**浮点数是double类型


(3)数据参与运算


A:整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则


**容量小的类型与容量大的类型进行计算,默认转换为容量大的数据类型;数据类型按容量大小排序为:


***byte,short,char->int->long->float->double


***byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型


**容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,


 但可能造成精度降低或溢出;使用时要格外注意。


**有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,


 然后再进行计算。


B:强制转换符


**格式:(数据类型)(要被转换的数据) byte b = (byte)(130);


C:字符型参与运算


**首先会去找对应字符的ASCII码值。然后运算。


**char 类型内容补充取值范围0~2(16)-1,我就有了一个问题?能不能把整数直接赋值给char类型的变量


D:布尔型参与运算


**不能参与运算


E:字符串参与运算


**它是和参与运算的数据相连接组成了一个新的字符串。


**因为有了这个特性,所以我们求出了我们名字的字符值就可以在内存中这样输出


**System.out.println(""+'\u51AF'+'\u4F73');输出的结果就是我的名字




思考:


byte b1=3,b2=4,b;


b=b1+b2;//(1)byte,short,char三种数据类型在内存中运算的时候会自动类型提升为int去运算


       //(2)b1和b2是两个变量值,jvm无法判断里面值的大小


b=3+4;//3+4的结果是7jvm可以对常量值进行判断,如果在byte的取值范围就不会报错,这和我们直接


     //定义byte b = 3;的道理是一样的,3在内存中默认也是int型的,但是当jvm判断他是在byte的范围


 //之内就不会报错


哪句是编译失败的呢?为什么呢?




3:运算符


(1)算术运算符 +,-,*,/,%,++,--


A:%


**当左边的绝对值小于右边:结果是左边


**当左边的绝对值等于右边或者是右边倍数的时候:结果是0


**当左边的绝对值大于右边:结果是余数,符号取决与左边的的符号


**取余的正负号取决于左边,右边忽略不记


**用途:任意正整数%2 结果是要么0,要么1。用于切换条件


B:++,--


**递增,递减运算符。就是加1或者减1


**单独存在,放在操作数的前面或者后面,结果一样


**参与运算时:


***放在操作数的前面,先自身加或者减1,然后再参与运算


***放在操作数的后面,先参与运算,然后再自身加或者减1




C:+


**作为数据的符号(正号)


**做加法运算


**字符串连接符


(2)赋值运算符


A:=:赋值运算符 把右边的值赋给左边


**举例:int x = 3; 把3赋给int类型变量x


B:+=:加赋值运算符 把左边和右边的和赋给左边


**举例:int x = 3; x+=2;等同于 x = x + 2;


**问个问题 byte b = 5;


          b += 127;//(byte)(5+127);


  System.out.println(b);会不会报错?


**+=运算符在给b赋值时,自动完成了强转操作。


(3)比较运算符


A:==,!=,>,<,>=,<=


B:比较运算符的结果都是boolean型,也就是要么是true,要么是false。


(4)逻辑运算符


/*


逻辑与运算符 &




第一个条件    第二个条件     结果


true          true

true


false         true           false


true          false          false


false         false          false




简单记:左右两边同时为true,结果为true。


*/




/*


逻辑或运算符 |




第一个条件    第二个条件     结果


true          true

        true


false         true           true


true          false          true


false         false          false




简单记:左右两边只要有一个结果是true,结果为true。


*/




/*


逻辑异或运算符 ^




第一个条件    第二个条件     结果


true          true

false


false         true           true


true          false          true


false         false          false




简单记:左右两边相同,结果为false。


*/




/*


逻辑非运算符 !




!true  false


!false true


       !!true true


*/




/*


短路与:




&:左边无论什么结果,右边都执行。


&&:左边为false,右边不执行,结果为false。






短路或:


|:左边无论什么结果,右边都执行。


||:左边为true,右边不执行,结果为true。


*/


(5)位运算符


<<一个数向左移动几位就乘以2的几次幂


>>一个数向右移动几位就除以2的几次幂


>>>无符号右移无论最高位的符号位是0还是1,用无符号右移后高位符号位都是补0


(6)三元运算符


A :(条件表达式)?表达式1:表达式2;


**如果条件为true,运算后的结果是表达式1;


**如果条件为false,运算后的结果是表达式2;


B:条件运算符运算完之后一定有一个结果