今天还是学习Java的一天,虽然天空飘起了小雨,窗外灰蒙蒙的,但依然不能降低我对学习的热情。
上课的老师还是那个讲的特别细致的老师,有的同学调侃老师比兰州拉面还要细,哈哈。以下是今天老师讲解的内容:
1、变量:在程序的执行过程中,其值可以发生改变的量叫变量。
定义变量的格式:(两种命名方式)
(1)、数据类型 变量名 = 初始化值;
(2)、数据类型 变量名;
变量名 = 初始化值;
2、数据类型:(有2种数据类型)
(1)、基本数据类型(有8种,从小到大排序)
所占存储空间 所能表示的数据范围
byte 1字节 -128~127
short 2字节 -2^15~2^15-1
int 4字节 -2^31~2^31-1
long 8字节 -2^63~2^63-1
float 4字节 -3.403*10^38~3.403*10^38
double 8字节 -1.798*10^308~1.798*10^308
char 2字节
boolean 1字节
(2)、引用数据类型(3种)
类 、接口 、数组
3、类型转换:
A 、自动类型转换:
byte ,short ,char在参与运算的时候会自动提升到int类型;
由大的数据类型接收小的数据类型,会自动转换,不会报错。
B 、强制类型转换
由小的数据类型接收大的数据类型会报错,接收不了,这时候需要强制类型转换;
格式:目标数据类型 目标变量名 = (目标数据类型)要转换的数值/变量
一般建议,最好不要随意使用强制类型转换,容易造成数据精度的损失。
(1)、容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度 降低或溢出;使用时要格外注意。
(2)、有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。
我们来做一道题目:
byte b1 = 3 , b2 = 4 , b ;
b = b1 + b2 ;
b = 3 + 4 ;
哪句是编译失败的呢?为什么呢?
答案是 b = b1 + b2 ; 错了,我相信聪明的你肯定做对了。而这就要说到变量相加和常量相加的不一样了:
1、变量相加首先会提升数据类型,然后再相加赋值,如果接收的数据类型范围小于计算结果后的数据类型范围,报错,不能赋值。
2、常量相加,会先进行计算,计算完后看看在不在接收的数据类型范围内,如果在,直接赋值,如果不在,报错。
这里b1与b2相加就是变量相加,两者提升到int类型,再赋值给byte类型的b肯定就出错了。
4、运算符:(6种)
(1)、算术运算符: + , - , * , / , %
最基本的运算符了吧。。
int a1 = 4;
int b1 = (a1++)+(++a1)+(a1*10);
//b1 = 4 + 6 + 6*10 = 70
// a1=5 a1=6 a1=6
结果:a1 = 6
b1 = 70
(2)、赋值运算符: = ,+= , -= , *= , /= , %
= 为基本的赋值运算符,其他的为扩展的赋值运算符。
(3)、比较运算符: == , > , < , >= , <= , !=
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
比较运算符 “ == ” 不能误写成 “ = ”。
(4)、逻辑运算符: & , | , ^ , ! , && , ||
逻辑运算符的两边放的是boolean类型的值,计算的结果也是一个boolean类型的值。
&: 参与运算的时候,两边有false,则false,两边都做运算。
| : 参与运算的时候,两边有true,则true,两边都做运算。
^: 参与运算的时候,相同为false,不同为true,两边都做运算。
! : 将true变成false,false变成true。
&& : 短路与,结果和单个与结果一样,有false则false,但是执行的东西不一样,
当 && 左边的表达式结果为false的时候,结果是false,右边不执行。
|| : 短路或,结果和单个或结果一样,有true则true,但是执行的东西不一样,
当 || 左边是true的时候,右边不执行,结果是true。
(5)、位运算符: & , | , ^ , ~ , << , >> ,>>>
<<: 左移,二进制左移,右边用0补齐,多出来的丢弃
>>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
>>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
由于数据在计算机中参与运算的都是补码,而想要知道补码,就得知道反码,原码,就得求出二进制。
请用二进制的形式计算3和4的&、|、^、~结果:
(byte)3的二进制: 00000011 、 (byte)4的二进制: 00000100
3的补码: 00000011 、 4的补码: 00000100 (3和4都是正数)
1、 & 运算: 有0则0
00000011
& 00000100
---------------
00000000 结果是: 0
====================================
2、 | 运算: 有1则1
00000011
| 00000100
--------------
00000111 结果是: 7
====================================
3、 ^ 运算: 相同则0,不同则1
00000011
^ 00000100
--------------
00000111 结果是: 7
====================================
4、 ~ 运算: 1变成0,0变成1
00000011
~
-------------
11111100 (这是补码)
已知补码求原码:
补码: 11111100
反码: 11111011 (11111100 - 1)
原码: 10000100 结果是: -4
请用最有效率的方式写出计算2乘以8的结果:(这里就有一个小技巧了:16 = 2*8 = 2*2^3)
System.out.println(2<<3);
(6)、三目运算符:
(关系表达式) ? 表达式1 : 表达式2 ;
如果关系表达式的结果为true,运算后的结果是表达式1;
如果关系表达式的结果为false,运算后的结果是表达式2;
又是充实的一天,明天继续奋斗,加油!