常量与变量
来源:互联网 发布:手机网络电视 安卓 编辑:程序博客网 时间:2024/04/28 03:02
2.4 常量与变量
1、变量的概念:
就是将不确定的数据进行存储,也就是需要在内存中开辟一个存储空间。
该区域有自己的名称(变量名)和类型(数据类型)
该区域的数据可以在同一类型范围内不断变化
为什么要定义数据类型?
就好像一套别墅,别墅中有厨房、卫生间、卧室等(数据类型)房间,它们分别用来存放不同的东西,每间房中只能放同类型的工具,不能把卫生间的马桶放厨房或者卧室……
如何开辟存储空间?
就是通过明确数据类型,变量名称,数据来完成。
2、为什么要定义变量:
用来不断的存放同一类型的常量,并可以重复使用
3、使用变量注意:
变量的作用范围(一对{}之间有效)
初始化值
定义变量的格式:
数据类型变量名=初始化值;
注:(1)格式是固定的,记住格式,以不变应万变。(2)与C++通用。
理解:变量就如同数学中的未知数。
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:只有两个取值true和false。
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运算中,1是int型,表达式要进行数据类型自动提升,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是变量不是具体数值,3和4是具体数值
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
b=b1+b2不可以,是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用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就是true,0就是false。
^
异或运算
6 ^ 3 = 5
相同二进制位进行^运算,结果是0;1^1=0 , 0^0=0
不相同二进制位^运算结果是1。1^0=1 , 0^1=1
注意规律:一个数异或一个数两次,结果还是这个数。
~
反码
~6 = -7
反码就是取反,注意正数取反后,再由二进制向十进制转化比较麻烦,简便算法是求这个二进制十进制的相反数;
注意:
1、<<:相当于乘与2的倍数
2、>>:相当于除以2的倍数
总结:移n位,就是乘以或者除以2的n次幂。
求一个数的相反数计算过程
求一个正数的相反数:
(1) 将正数转化成二进制数;
(1) 取反;
(2) 加二进制1;
(4) 将二进制转化成十进制;
反过来求一个负数的相反数:
(1) 将负数转换成二进制;
(1) 减二进制1;
(2) 取反;
(4) 将二进制转换成十进制;
- 变量与常量(1)
- 3.1 常量与变量
- 变量与常量
- 变量与常量
- java变量与常量
- 变量与常量
- PHP 常量与变量
- 变量与常量
- 【php】常量与变量
- 常量与变量
- 常量与变量
- oc 常量与变量
- 常量与变量
- 常量与变量注意事项
- 2.2常量与变量
- PHP 常量与变量
- 常量与变量
- 常量与只读变量
- http协议与SMTP协议的区别?
- socket原理讲解
- Spring+iBatis多数据源的动态配置方案
- An experience of fixing a memory-corruption bug (1)
- 学习make(六)
- 常量与变量
- 谁以微笑,淡了流年
- win7系统组件中无法安装IIS和FTP服务的解决办法
- Ubuntu 12.04 wpa/wpa2无线上网手动配置
- UML常用图例详解
- 第三周项目三-时间类
- 匿名内部类笔记
- Oracle的默认用户(和密码)及其创建脚本
- Several notes on Redis