常量与变量

来源:互联网 发布:手机网络电视 安卓 编辑:程序博客网 时间:2024/04/28 03:02

2.4 常量与变量

1、变量的概念:

就是将不确定的数据进行存储,也就是需要在内存中开辟一个存储空间。

该区域有自己的名称(变量名)和类型(数据类型

该区域的数据可以在同一类型范围内不断变化

 

为什么要定义数据类型?

就好像一套别墅,别墅中有厨房、卫生间、卧室等(数据类型)房间,它们分别用来存放不同的东西,每间房中只能放同类型的工具,不能把卫生间的马桶放厨房或者卧室……

 

如何开辟存储空间?

就是通过明确数据类型,变量名称,数据来完成。

2、为什么要定义变量:

用来不断的存放同一类型的常量,并可以重复使用

3、使用变量注意:

变量的作用范围(一对{}之间有效 

初始化值

定义变量的格式:

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

注:(1)格式是固定的,记住格式,以不变应万变。(2C++通用

理解:变量就如同数学中的未知数。

2.4 常量与变量

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

注意:整数默认:int     小数默认:double

 

1、整数类型在内存中开辟的空间不同:

byte:占1个八位来表示,即用8个二进制数来表示一个字节。  取值范围:-27——+27-1  -128——+127

short:占2个八位,即用16个二进制数来表示。取值范围:-215——+215-1   -32768——+32767

int:占4个八位,即32个二进制位来表示。取值范围:-231——+231-1   这个范围生活中的数据基本都能装下。

long:天文数字,超出int型范围是会用。

举例:CPU缓存,按需定义,开辟不同大小的存储空间。

 

2、单精度和双精度的最大区别在于精确程度不同,因为精确程度不同,那么他们在空间中占的内存也不一样:

float:占了四个八位,即32个二进制位。

double:占了八个八位,即64个二进制位。

 

3、字符型:

char:占两个八位,即16个二进制位。范围0——6535

 

4、布尔型:

boolean:只有两个取值truefalse

 

2.4 常量与变量

自动类型转换(也叫隐式类型转换) 

强制类型转换(也叫显式类型转换)

类型转换的原理

什么时候要用强制类型转换?

表达式的数据类型自动提升(由低级向高级提升)

所有的byte型、short型和char的值将被提升到int型。int型运算还是int型)

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

分析

System.out.println(‘a’)System.out.println(‘a’+1)的区别。

‘a’char型,在System.out.println(‘a’)中不发生数据类型自动提升,所以输出a

‘a’+1运算中,1int型,表达式要进行数据类型自动提升,a在计算机中有自己的ASCII码值,所以可以由char型提升为int型,进行计算;

2.4 常量与变量

自动类型提升

byte b = 3;

int x = 4;

x = x + b;//b会自动提升为int类型进行运算。

强制类型转换

byte b = 3;

b = b + 4;//报错

b = (byte)(b+4);//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b

思考:

byte b1=3,b2=4,b;

b=b1+b2;*失败

b=3+4;

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

b1b2是变量不是具体数值,34是具体数值

 

b=3+4 34都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。

b=b1+b2不可以,是因为b1b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储。

2.5 运算符

算术运算符

赋值运算符

比较运算符

逻辑运算符

位运算符

三元运算符

2.5.1 算术运算符

算术运算符的注意问题

如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论,如:-2%5=-2;

规律:左正余正,左负余负(或者:左号同,其余同)

对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。

例如:int x=3510;x=x/1000*1000;  x的结果是?          3000

+”除字符串相加功能外,还能把非字符串转换成字符串。

字符串数据和任何数据使用“+”都是相连接,最终都会变成字符串。

例如:System.out.println("5+5="+5+5);//打印结果是?     5+5=55

转义字符:

定义:通过反斜线\来转变后面字母或者符号的意义。

\n

回车换行(回车符)

Windows系统(dos中直接能识别\n

\b

退格,相当于backspace

 

\r

回车换行(回车符)

Windows系统,linux系统

\t

制表符,相当于tab

 

\”

输出一个单引号

进行了转义

\’

输出一个单引号

进行了转义

\\

输出一个\\

对后面那个\进行了转义

 

 

 

注意:

1、 不是所有的字母都能被转义为具有特殊含义的操作,能被转义的只有几个,很多事无效转义的,如:\h等;

2、 println后面的ln:本句结束回车换行

 

 

2.5.2 赋值运算符

符号:

=

把右边的值赋给左边

+=

把左右两边的和再赋给左边

-=

把左右两边的差再赋给左边

*=

把左右两边的积再赋给左边

/=

把左右两边的商再赋给左边

%=

把左右两边的余数再赋给左边

注意:

1、 这些运算符都是一次运算符,并不是分两步进行运算的。

2、 一次运算电脑可以完成自动类型提升转换,两次运算时不能完成自动类型提升转换,类型超出存储时,会出现精度错误。

示例:

                   int a,b,c;  a=b=c =3;

                   int a = 3;   a+=5;等同运算a=a+5;

 

思考:

short s = 3;

s=s+2;

s+=2;   

有什么区别?    

 

s=s+2//编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。

s+=2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。

2.5.3 比较运算符

 

注意:

1、比较运算符的结果都是boolean型,也就是要么是true,要么是false

2、比较运算符“==”不能误写成“=”;

 

 

 

 

2.5.4 逻辑运算符

 

逻辑运算就是一种关系,用于连接boolean类型的表达式

 

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6

&”和“&&”的区别:

&时,左边无论真假,右边都进行运算;

&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

         |”和“||”的区别同理,双或时,左边为真,右边不参与运算。

异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false

 

 

2.5.5 位运算符

位运算符

运算符

运算

范例

细节

<< 

左移

3 << 2 = 12 --> 3*2*2=12

空位补0,被移除的高位丢弃,空缺位补0

>> 

右移

3 >> 1 = 1  --> 3/2=1

被移位的二进制最高位是0(正数的二进制),右移后,空缺位补0

最高位是1(负数的二进制),空缺位补1

注意:右移对于获取其他整数的表现形式很方便。

>>> 

无符号右移

3 >>> 1 = 1 --> 3/2=1

被移位二进制最高位无论是0或者是1,空缺位都用0补。

&

与运算

6 & 3 = 2

二进制位进行&运算,只有1&1时结果是1,否则是0;

|

或运算

6 | 3 = 7

二进制位进行|运算,只有0 | 0时结果是0,否则是1;

 

技巧:二进制1就是true0就是false

^

异或运算

6 ^ 3 = 5

相同二进制位进行^运算,结果是01^1=0 , 0^0=0

不相同二进制位^运算结果是11^0=1 , 0^1=1

注意规律:一个数异或一个数两次,结果还是这个数。

~

反码

~6 = -7

反码就是取反,注意正数取反后,再由二进制向十进制转化比较麻烦,简便算法是求这个二进制十进制的相反数;

注意:

1<<:相当于乘与2的倍数

2>>:相当于除以2的倍数

总结:移n位,就是乘以或者除以2的n次幂。

 

求一个数的相反数计算过程

求一个正数的相反数:

1 将正数转化成二进制数;

(1)      取反;

(2)      加二进制1

4 将二进制转化成十进制;

反过来求一个负数的相反数:

1 将负数转换成二进制;

(1)      减二进制1

(2)      取反;

4 将二进制转换成十进制;

 

 

 

 

0 0
原创粉丝点击