变量和数据类型
一.什么是变量?
一个数据存储空间的表示
二.变量的表示
1)变量名
2)变量类型
3)变量值
三.变量的命名规则
1)组成:由字母、数字、下划线“_”、美元符“$”组成
2)不能以数字开头
3)不能是关键字,不能是true/false(布尔值),null之类
4)严格区分大小写,长度不限,坚持见名知意的原则
5)驼峰命名法
四.什么是标识符
凡是可以由自己命名的地方都可以成为标识符
五.什么是关键字
具有特殊意义的词,称之为关键字,如public、static、class
六.九个数据类型
1.八个基本数据类型
1)byte
一个byte类型整数在内存里占8位,范围是-128(-27)~127(27-1)
2)short(不常用)
一个short类型整数在内存里占16位,范围是-32768(-215)~32767(215-1)
3)int
一个int类型整数在内存里占32位,范围是-2147483648(-231)~2147483647(231-1)
最常用的整数类型,整数值默认int类型
4)long
一个long类型整数在内存里占32位,范围是(-263)~(263-1)
5)float(不常用)
单精度浮点数,一个float类型浮点数在内存里占4字节、32位,范围是
1.4E-45(即1.4*10-45) ~ 3.4E+38
定义float类型的变量,必须在数值后面加"f"或"F"
不能精确表示
6)double
双精度浮点数,一个double类型浮点数在内存里占8字节、64位,范围是
4.9E-324 ~ 1.7E+308
浮点类型默认是double类型
不能精确表示,因此无法直接比较两个double类型变量的大小
for (int i = 1; i < 20; i++) {
System.out.println(0.369+3.145);
//运行会发现结果不是3.514
}
7)char
表示单个字符,定义时必须用单引号括起来
char a = '男';
使用16位Unicode字符集作为编码方式,范围是\u0000(即为 0)~\uffff(即为 65535)
8)boolean
Boolean类型的数值只能是true或false,其他基本数据类型也不能转换成Boolean类型
static byte a;
static int b;
static short c;
static long d;
static float e;
static double f;
static char g;
static boolean h;
static String i;
public static void main(String[] args) {
float ab = 2.0F;
System.out.println(ab); // 定义float类型的变量,须在数值后面加"f"或"F"
System.out.println(a); // byte数据类型的默认值为0
System.out.println(b); // int数据类型的默认值为0
System.out.println(c); // short数据类型的默认值为0
System.out.println(d); // long数据类型的默认值为0
System.out.println(e); // float数据类型的默认值为0.0
System.out.println(f); // double数据类型的默认值为0.0
System.out.println(g); // char数据类型的默认值为空
System.out.println(h); // boolean数据类型的默认值为false
System.out.println(i); // String数据类型的默认值为null
}
2.一个引用数据类型
String类型
定义时须用双引号括起来
String a ="床前明月光,疑是地上霜";
七.常量
语法:
final 数类型 变量名 = 变量值;
final double MATH_PI = 3.14;
注意:
1)常量名通常大写
2)不同分词使用下划线分隔
3)只能被赋值一次,通常定义时即对其初始化
八.数据类型的类型转换
1.自动类型转换
低精度向高精度会自动转换
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
满足自动类型转换的条件:
1)两种类型要兼容
2)数值类型(整型和浮点型)互相兼容
3)目标类型大于源类型:
int before = 5;
double raise = 3.14;
double now = before + raise; //自动类型转换 int——》double
System.out.println(now);
2.强制类型转换
高精度向低精度需要强转,只保留整数位,精度自动舍弃
强制类型转换时用小括号括起来
int before = 20;
double rise = 9.8;
int now = (int)(before + rise);
九.运算符
1.赋值运算符
语法:
变量类型 变量名 = 表达式;
int sum = num1 + num2;
2.算数运算符
加+ 减- 乘* 除/ (相当于除法当中的商) 求余% (相当于除法当中的余数)
加加++ 减减–:
写在变量前:先变量值加减,后使用变量值
写在变量后:先使用变量值,后变量值加减
复合运算符:
+= -= *= /= %=
num += 2; --> num = num + 2;
是单个运算符,当数据类型不匹配时不能转换
short a = 4;
a += 5; // 编译通过
a = a + 4; // 编译不通过,类型不匹配
3.关系运算符
== 等于 判断是否相等
!= 不等于 判断不相等
> 大于 判断大于
< 小于 判断小于
>= 大于等于 判断大于等于
<= 小于等于 判断小于等于
注意:> 、< 、>= 、<= 只适用于数值类型判断
4.逻辑运算符
1)短路与:&& 所有表达式都为true,整个表达式才为true,第一个表达式为false,不看第二个表达式
2)短路或:|| 有一个表达式为true,整个表达式就为true,第一个表达式为true,不看第二个表达式
3)非:! 取反,表达式为true,则为false
4)不短路与:& 所有表达式都为true,整个表达式才为true,第一个表达式为false,继续后面的表达式
5)不短路非:| 有一个表达式为true,整个表达式就为true,第一个表达式为true,继续后面的表达式
6)异或:^ 两个表达式结果不同时返回true,结果相同时返回false
5.三元(三目)运算符
语法:
条件表达式 ? 表达式1 :表达式2;
条件表达式为true,结果为表达式1的值,否则为表达式2的值
表达式1或者2的类型必须跟定义变量类型一致
6.运算符的优先级
1)优先级别最低的是赋值运算符
2)可以通过()控制表达式的运算顺序,()优先级最高
3)算术运算符 > 关系运算符 > 逻辑运算符
灵活用法:当不确定优先级的时候,优先选择使用小括号()