常量
- 常量 : 在程序执行过程中,其值不能改变
Java中常量的分类
- 字面值常量
- 自定义常量
字面值常量的分类
- 字符串常量 用双引号括起来的内容
- 整数常量
所有整数
- 小数常量
所有小数
- 字符常量
用单引号引起来的内容 里面只能是单个字符
- 布尔常量
true 和 false
- 空常量
null
进制 (scale)
- 二进制 以0b开头
- 八进制 以0开头
- 十六进制 0x开头
变量
java 是强类型语言,对每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间
基本数据类型
引用数据类型
-
- 基本数据类型
- 整数型
byte 占一个字节 -128 ~ 127
short 占两个字节 -215~215-1
int 占四个字节 -231~231-1
-
long 占八个字节 -263~263-1
- 浮点型
float 占四个字节
-
double 占八个字节
- 字符型
-
char 占两个字节 0~65535
- 布尔型
boolean
- boolean 理论上占八分之一个字节
但是java中boolean没有明确说明它的大小
- boolean 理论上占八分之一个字节
注意
- 小数默认是double 若是float 需要在数后面加一个f
long类型后面最好加一个L
局部变量在使用前必须赋值
强制转换
比如
int t ;
byte b;
b = (byte)(t+b);
// 整型t去掉前三个八位 变为byte型进行运算
// 向下强制转换可能会损失精度
原码 反码 补码
- 计算机实际运算的时候都是以补码形式进行运算的
原码 就是二进制表示法 最高位是符号位 0表示正 1表示负
反码 正数原返补都相同 负数反码除了符号位逐位取反
补码 正数原返补都相同 负数补码在反码末位上加1
运算只取8 位 进位超出的不要
测试题
检查下面的程序是否有问题
byte b1 = 3;
byte b2 = 4;
byte b3 = b1+b2;
byte b4 = 3 + 4;
编译报错
- 两个方面
整数默认类型是int 浮点数默认是double byte short char 都会提升为int进行计算 两个int相加也是int
b1 b2 是两个变量 变量存储的值是变化的 编译的时候无法判断里面的值 (只有运行的时候才可以知道多大 )相加有可能超过byte的取值范围
b4为啥不报错
java编译器有常量优化机制 在编译过程中就能把3+4取到算出来 在byte范围内就可以直接赋值过去
long 占 8 位 float占4位 float 和long 谁大谁小 ?
float 比 long 能存的数大很多(不考虑小数精度啥的 单纯比较大小)
字符串
任何数据类型用 + 与字符串相连接都会产生新字符串
字符
java中的char 0~65535
java中的charUnicode编码 占用两个字节 一个中文汉字也是两个字节 所以可以存储一个中文汉字.
测试题
问哪行报错
short a;
a=a+1;
short b;
b+=1;
解答:
第二行 会报丢失精度的错误
b+=1隐含了强制转换 // 相当于 b=(short)(b+1);
关系运算符
得到true 或者 false