复习_数据类型与运算符

1.数据类型
1.1 整形
int num=10;

  • 一个int变量占4个字节
  • int类型表示的数据范围:-2^31-- 2^31-1,即-21亿–+21亿
  • Java中表示int最大值:Integer.MAX_VALUE
  • Java中表示int最小值;Integer.MIN_VALUE
  • 运算超出int数据类型的数值范围就会溢出

1.2 长整型数据类型
long num=10L;

  • 定义长整型数据初始化数值后面要+L(l)
  • 一个long变量占8个字节
  • long类型表示的数据范围:-2^63-- 2^63-1
  • 长整型最大值:Long.MAX_VALUE
  • 长整型最小值:Long.MIN_VALUE

1.3 双精度浮点型变量
double num=1.0;

  • 8个字节

1.4 单精度浮点型变量
float num=1.0f;//也可写作1.0F

  • 4个字节

1.5 字符类型变量
char ch=‘A’;

  • Java中使用单引号+单个字母的形式表示字符字面值
  • 字符的本质是一个整数,Java中使用Unicode表示字符
  • 一个字符占2个字节,也可表示中文

1.6 字节类型变量
byte value=0;

  • 字节类型表示的也是整数,范围较小,-128–127

1.7 短整型变量
short value=0;

  • short类型占2个字节,-32768–32767

1.8 boolean类型变量
boolean value=true;

  • boolean类型变量只有true和false两种取值
  • boolean类型数据不能和其他数据类型替换

1.9 字符串类型数据变量
String name=“zhangsan”;

  • Java使用双引号+若干字符表示字符串字面值
  • String不是基本数据类型,而是引用类型

1.10 变量的作用域
一般是定义变量所在的代码块

1.11 变量的命名规则
硬性指标:

  • 一个变量名只能包含数字,字母,下划线
  • 数字不能作为开头
  • 变量名对大小写敏感

软性指标:

  • 变量名要见名知意
  • 变量名不宜使用拼音
  • 命名使用小驼峰命名法:studentName

1.12 常量
常量指程序运行时不能发生改变
常量有两种体现形式:

  • 字面值常量
    在这里插入图片描述
  • final关键词修饰的常量
    final int a=10;
    a=20;//编译出错,无法为a重新分配值
    被final修饰的常量,在程序运行时不能被修改

1.13 类型转换
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验.
(1)
先看以下几个代码场景:int 和 long/double 相互赋值
int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.

int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.

long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.
double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将double 赋值给 int.
结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.
(2)

  • 毫不相干的两种数据类型不能互相转换,比如int和boolean
  • 使用字面量常量赋值时,java会自动进行一些检查校验,判断赋值是否合理
    比如:
    int字面值常量给 byte 赋值
    byte a = 100; // 编译通过
    byte b = 256; // 编译报错, 提示从int转换到byte可能会有损失
    注意: byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内
    -使用强制类型转换
    (1)
    int a=0;
    double b=10.5;
    a=(int)b ;
    (2)
    int a=10;
    boolean b=false;
    b=(boolean)a;//编译出错,不兼容的类型
    结论: 使用 (类型) 的方式可以将 double 类型强制转成 int. 但是:

1. 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
2. 强制类型转换不是一定能成功, 互不相干的类型之间无法强转.

类型转换小结:
1.不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换为表示范围较大的数据类型
2.如果要把范围大的类型转换为范围小的类型,需要进行强制类型转换,但是可能精度丢失
3.将一个字面值常量进行复制的时候,java会自动针对数字范围进行检查

1.14 理解数值提升
(1)int 和 long混合运算
int a=10;
long b=20;
int c=a+b;//编译出错,提示long转换为int精度丢失
long d=a+b;//编译通过
结论:当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

(2)byte和byte的运算
byte a=20;
byte b=10;
byte c=a+b;
System.out.println©;
//编译报错,错误:不兼容的类型,int转换为byte会有精度丢失
结论:
1.byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.

2.由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算.

正确的写法:
byte a=10;
byte b=20;
byte c=(byte)(a+b);

类型提升小结:
1.不同数据类型进行混合运算,范围小的会提升为范围大的
2.对于short,byte这种小于四个字节的的类型,会先提升成4个字节的int类型,再运算

2.算术运算符

  • 基本运算符:+,- ,*,/,%
    (1)int/int结果还是int,需要用double来运算
    (2)0不能做除数
    (3)可以对int取模,也可以对double进行取模
  • 增量赋值运算符:+= ,-=, *= ,/=, %=
    结论:
    1.如果不取自增运算符表达式的返回值,则前置(++i)和后置(i++)没啥区别
    2.如果取表达式的返回值,则前置取的是增加后的值,后置取的是增加之前的值
  • 关系运算符:== ,!=, <, >, <=, >=
    注意:关系运算符表达式返回值是boolean数值
  • 逻辑运算符:&&, ||, !
    注意:逻辑运算符表达式返回值是boolean数值
  • 位运算符:&, |, ~, ^
    按位与&:如果两个二进制位都是1,结果为1,否则为0
    int a=10;
    int b=20;
    sout(a&20);
    进行按位运算, 需要先把 10 和 20 转成二进制, 分别为 1010 和 10100
    在这里插入图片描述

按位或 |:如果两个二进制位都是0,结果为0,否则为1
int a=10;
int b=20;
sout(a|20);

按位取反~:0变1,1变0

按位异或^:同0异1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值