Java常量变量的数据类型与运算符
目录
- @[TOC](目录)
- 一、常量、变量、数据类型
- 1. 常量的概述和使用
- 2. 不同进制的转化
- 3. 原码反码补码
- 4.变量的概述及格式
- 5. 数据类型
- 6. 变量定义注意事项
- 7. 数据类型转换
- 8. 变量相加与常量相加的区别
- 9. 字符与字符串参与运算
- 二、运算符
- 1. 算术运算符
- 2. ++与--练习
- 3. 赋值运算符
- 4. +=与=的区别
- 5. 关系运算符
- 6. 逻辑运算符
- 7. 位运算符
- 8.三元(目)运算符
- 一、常量、变量、数据类型
- 1. 常量的概述和使用
- 2. 不同进制的转化
- 3. 原码反码补码
- 4.变量的概述及格式
- 5. 数据类型
- 6. 变量定义注意事项
- 7. 数据类型转换
- 8. 变量相加与常量相加的区别
- 9. 字符与字符串参与运算
- 二、运算符
- 1. 算术运算符
- 2. ++与--练习
- 3. 赋值运算符
- 4. +=与=的区别
- 5. 关系运算符
- 6. 逻辑运算符
- 7. 位运算符
- 8.三元(目)运算符
一、常量、变量、数据类型
1. 常量的概述和使用
- 什么是常量:在程序运行过程中值不发生改变的量
- 常量的分类:
- 字面值常量
- 自定义常量
- 字面值常量的分类:
- 字符串常量:用双引号括起来,例如 “Hello World!”
- 整数常量:所有整数,例如 12
- 小数常量:所有小数,例如 3.14
- 字符常量:用单引号括起来,例如 ‘A’
- 布尔常量:true/false
- 空:Null
- 整数常量的四种表现形式:
- 二进制:由01组成,以“0b”为前缀
- 八进制:由0~7组成,以“0”为前缀
- 十进制:由0~9组成,默认为十进制,无需前缀
- 十六进制:由0~9和a,b,c,d,e,f 组成,以“0x”为前缀
2. 不同进制的转化
- 任意进制转十进制:位权展开法,对每一位进行 “系数*基数^幂” 运算,然后加和
- 十进制转任意进制:除基取余,直到商为零,余数反转
3. 原码反码补码
- 注:计算机底层的运算都是通过补码进行的,原码是我们人能理解的最直观的有符号数的表示方式
- 原码:二进制的定点表示法,用最高位表示符号(0为正,1为负),其余位表示数值的大小
- 反码:正数的补码等于原码,负数的补码是对其原码符号位不变,其余位按位取反
- 补码:正数的补码等于其原码,复数的补码对其反码末位加1
数 | 原码 | 反码 | 补码 |
---|---|---|---|
正数 | 原码 | 原码 | 原码 |
负数 | 原码 | 符号位不变,数值位取反 | 末位加一 |
4.变量的概述及格式
- 变量的定义:变量是指在程序中可以多次赋值的量
变量其实是内存中的一小块区域,这一小块区域中存储着变量的值(具体的值或地址) - 变量用途:可以重复使用,用来存放统一数据类型的常量
- 定义格式:数据类型 变量名 = 变量值;
5. 数据类型
- 为什么要有数据类型:因为变量其实就是内存中的一小块区域,定义一个变量其实就是开辟了一个内存空间,那么不同的数据大小长度不同,该开辟多大的空间合适,这时候就出现了数据类型,针对不同类型的数据,分配不同大小的内存空间
- Java数据类型分类
6. 变量定义注意事项
- 作用域:变量定义在哪一对大括号里面,作用域就在里面,同一个作用域中不能定义两个同名变量
- 必须初始化后才能使用
7. 数据类型转换
- 隐式转换
- 隐式转换是Java中的默认转换规则
- 在数值型数据运算中,如果只有byte,short,char类型时,会隐式转换为int类型进行运算
- 如果还有long,float,double类型时,会隐式转化为long,float,double类型进行运算
- 注:隐式类型是小转大的
- 显示转换(强转)
- 格式:目标数据类型 变量名 = (目标数据类型)(被转换的数据);
- 注意事项:强转可能会损失精度,尽量不要使用强转
- 例子:byte b = 1+2;
因为隐式转换为int类型进行运算,所以程序会报错,可以改为:
byte b = (byte)(1+2);
8. 变量相加与常量相加的区别
- 以下代码是否有问题,如果有,请指出
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
- //byte b3 = b1 + b2;会报错,因为byte类型的变量b1,b2在运算的时候是默认转换为int类型(4位)的,用byte类型(2位)的变量b3去接收就会报错
- //byte b4 = 3 + 4;不会报错,因为这行代码执行时会先执行3+4=7,再把结果转换为接收的变量b4的类型,所以不会报错
9. 字符与字符串参与运算
- 以下代码输出结果是多少,并解释
System.out.println('a' + 1);
System.out.println("hello" + 'a' + 1);
System.out.println('a' + 1 + "hello");
System.out.println("5+5="+5+5);
System.out.println(5+5+"=5+5");
- 第一行输出结果为:98
因为先将char类型的 ‘a’ 转换为97(Ascii码),再与1相加 - 第二行输出结果为:helloa1
因为字符串与字符 ‘a’ 相加是一个字符串,得到的字符串再与1相加,结果也是字符串 - 第三行输出结果为:98hello
因为先计算 ‘a’ +1,会默认转换为int型,运算结果为98,98再与字符串进行运算,得到98hello - 同理, 第四行输出结果为:5+5=55
- 第五行输出结果为:10=5+5
二、运算符
1. 算术运算符
- 运算符分类
- 算术运算符:+ , - , * , / , % , ++ , –
- 赋值运算符:=, +=,-=,*=,/=,%=
- 比较运算符(关系运算符):== ,!= , < , > , <= , >= , instanceof
- 逻辑运算符
- 位运算符
- 三目运算符
- 整数相除只能得到整数。如果想得到小数,请使用浮点数
- “/”获取的是除法操作的商,“%”获取的是除法操作的余数
- ++(自增)
- j = ++i;
先对i的值进行加 1,再把值赋给j - j = i++;
先把i的值赋给j,再对i的值进行加1
- j = ++i;
- –(自减)
- j = --i;
先对i的值减1,再把得到的值赋给j - j = i–;
先把i的值赋给j,再对i减1
- j = --i;
2. ++与–练习
- 分别计算 a,b,c 的值
int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
- a=9,b=10,c=8;
- 计算 x 和 y 的值
int x = 4;
int y = (x++) + (++x) + (x*10);
- x=6,y=70;
3. 赋值运算符
- 格式:变量 赋值运算符 值;
- 种类:=, +=,-=,*=,/=,%=
- i+=1:等价于 i=i+1;
- i-=1:等价于 i=i-1;
- 其他以此类推
- 注意:赋值运算符左边必须是变量
4. +=与=的区别
- 下面程序是否有问题,如果有请指出
short s=1;
s = s+1;
short s=1;
s+=1;
- 程序会在第二行报错,因为在计算short类型变量s与1相加时,会先将他们转换为int类型,计算的结果也是int类型的,再用short类型的变量s去接收就会丢失精度,所以会报错
- 第四行不报错的原因是,“+=”符号在运算结束后会将得到的值自动转换为接收的变量的类型,所以不会报错
5. 关系运算符
- 种类:== ,!= , < , > , <= , >= , instanceof
- 注意:“=”是赋值运算符,而“==”是关系运算符
- 关系运算符得到的结果是boolean类型的值,即true/false
6. 逻辑运算符
- 种类:&(与)、|(或)、!(非)、^(异或)、&&(短路与)、||(短路或)
- 语法
- &(与):同真为真,有假则假
- |(或):有真则真,同假则假
- !(非):真变为假,假变为真
- ^(异或):相同为false,不同为true
- &&(短路与):同真为真,有假则假
- ||(短路或):有真则真,同假则假
- &与&&的区别
两者的运算结果相同,&在计算时会将符号两边的式子都计算一遍,再得出最后答案;但是&&在运算时会先计算符号左边的数值,如果为假(即可以得出最终答案为假)时,就不再计算右边的式子了,如果为真(得不到最终答案),再计算右边的式子,得到最后答案,这个过程称之为短路。 - | 与 || 的区别
与上面一样,两者的运算结果一样,| 会将符号两边的式子都计算一边,再得出最终值;而 || 会先计算式子左边的值,如果为true(可以得出最终结果为true),就直接返回最终值true,不再计算右边式子,如果为false,再计算右边的值,得到最终值。
7. 位运算符
- 种类:&(与)、|(或)、^(异或) 、~(按位取反)、 <<(左移)、>>(右移) 、>>>(无符号右移)
- 语法
- &(与):有0则0
- |(或):有1则1
- ^(异或):相同则0,不同则1
- ~(按位取反):0变1 1变0
- <<(左移):空位补0,被移除的高位丢弃
- ">>(右移):被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,高位补1
- ">>>(无符号右移):被移位二进制最高位无论是0或者是1,空缺位都用0补
- ^的特点
-
被同一个数异或两次等于这个数本身
-
a异或b=b异或a
-
利用^运算符实现两个数值的互换
int a=5; int b=10;//利用^实现a=10,b=5 a=a^b; b=a^b; //此时b=(a^b)^b=a a=a^b; //a=(a^b)^a=b
-
- ">>与<<运算特点
- ">>:把>>左边的数据除以2的移动次幂 。 例如16>>2 , 结果为:16/2^2=4
- <<:把<<左边的数据乘以2的移动次幂 。 例如 4<<2 , 结果为: 4*2^2=16
8.三元(目)运算符
-
语法:
- (关系表达式)?表达式1:表达式2;
-
执行过程:先判断关系表达式,如果为true,则返回表达式1,如果为false,则返回表达式2
-
用三元运算符获取两个数的最值
int a=5; int b=10; int max=(a>b)?a:b;//如果a大则返回a,否则返回b int min=(a<b)?a:b;
发布评论