Java常量变量的数据类型与运算符

一、常量、变量、数据类型

1. 常量的概述和使用
  • 什么是常量:在程序运行过程中值不发生改变的量
  • 常量的分类:
    1. 字面值常量
    2. 自定义常量
  • 字面值常量的分类:
    1. 字符串常量:用双引号括起来,例如 “Hello World!”
    2. 整数常量:所有整数,例如 12
    3. 小数常量:所有小数,例如 3.14
    4. 字符常量:用单引号括起来,例如 ‘A’
    5. 布尔常量:true/false
    6. 空:Null
  • 整数常量的四种表现形式:
    1. 二进制:由01组成,以“0b”为前缀
    2. 八进制:由0~7组成,以“0”为前缀
    3. 十进制:由0~9组成,默认为十进制,无需前缀
    4. 十六进制:由0~9和a,b,c,d,e,f 组成,以“0x”为前缀
2. 不同进制的转化
  • 任意进制转十进制:位权展开法,对每一位进行 “系数*基数^幂” 运算,然后加和
  • 十进制转任意进制:除基取余,直到商为零,余数反转
3. 原码反码补码
  • 注:计算机底层的运算都是通过补码进行的,原码是我们人能理解的最直观的有符号数的表示方式
  • 原码:二进制的定点表示法,用最高位表示符号(0为正,1为负),其余位表示数值的大小
  • 反码:正数的补码等于原码,负数的补码是对其原码符号位不变,其余位按位取反
  • 补码:正数的补码等于其原码,复数的补码对其反码末位加1
原码反码补码
正数原码原码原码
负数原码符号位不变,数值位取反末位加一
4.变量的概述及格式
  • 变量的定义:变量是指在程序中可以多次赋值的量
    变量其实是内存中的一小块区域,这一小块区域中存储着变量的值(具体的值或地址)
  • 变量用途:可以重复使用,用来存放统一数据类型的常量
  • 定义格式:数据类型 变量名 = 变量值;
5. 数据类型
  • 为什么要有数据类型:因为变量其实就是内存中的一小块区域,定义一个变量其实就是开辟了一个内存空间,那么不同的数据大小长度不同,该开辟多大的空间合适,这时候就出现了数据类型,针对不同类型的数据,分配不同大小的内存空间
  • Java数据类型分类
    数据类型框图
6. 变量定义注意事项
  • 作用域:变量定义在哪一对大括号里面,作用域就在里面,同一个作用域中不能定义两个同名变量
  • 必须初始化后才能使用
7. 数据类型转换
  • 隐式转换
    1. 隐式转换是Java中的默认转换规则
    2. 在数值型数据运算中,如果只有byte,short,char类型时,会隐式转换为int类型进行运算
    3. 如果还有long,float,double类型时,会隐式转化为long,float,double类型进行运算
    4. 注:隐式类型是小转大的
  • 显示转换(强转)
    1. 格式:目标数据类型 变量名 = (目标数据类型)(被转换的数据);
    2. 注意事项:强转可能会损失精度,尽量不要使用强转
    3. 例子: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. 算术运算符
  • 运算符分类
    1. 算术运算符:+ , - , * , / , % , ++ , –
    2. 赋值运算符:=, +=,-=,*=,/=,%=
    3. 比较运算符(关系运算符):== ,!= , < , > , <= , >= , instanceof
    4. 逻辑运算符
    5. 位运算符
    6. 三目运算符
  • 整数相除只能得到整数。如果想得到小数,请使用浮点数
  • “/”获取的是除法操作的商,“%”获取的是除法操作的余数
  • ++(自增)
    1. j = ++i;
      先对i的值进行加 1,再把值赋给j
    2. j = i++;
      先把i的值赋给j,再对i的值进行加1
  • –(自减)
    1. j = --i;
      先对i的值减1,再把得到的值赋给j
    2. j = i–;
      先把i的值赋给j,再对i减1
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;
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值