变量、数据类型、表达式
一、变量
-
概念:计算中的一块存储空间,是存储数据的基本单位。【理解】
-
组成:数据类型、变量名、数据。
-
变量的定义:【重点】
(1) 声明变量:数据类型 变量名;
赋值:变量名 = 值;
(2) 声明的同时 赋值:数据类型 变量名 = 值;
(3) 同时定义多个同类型的变量:
数据类型 变量名1,变量名2 =值,变量名3;
二、数据类型【重点】
-
基本数据类型(简单数据类型、原始数据类型)—》8种基本数据类型
(1) 整数类型
关键字
byte 1B -128~127
short 2B -32768~32767
int 4B -2147483648~ 2147483647
long 8B -922京 ~ 922京-1
注意:long类型的字面值后面需要加 L 或是 l,通常用 L(区分 数据1和字母l)
字面值:程序中可以给某个对应类型变量赋的数据
扩充: 字节 -> Byte简写为B --> 一个字节等于 8位(bite简写 b)
1 B = 8 b
1024B = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
(2) 小数类型(浮点类型)
a. 单精度浮点: float 4B
b. 双精度浮点: double 8B
注意:
I. float 字面值后面必须加 F 或是 f;
double字面值的后面可以添加 d 或是 D,也可以不加
II. float 和 double 都可以采用科学计数法形式存储,近似值。
例如:2.14748365E9 等价于 2.14748365 * 10 ^9
面试题目: int 类型变量 和 float类型的哪一个存储的数据范围大一些?
解析: float类型,虽然 int 和 float 都是 4B ,但是 float 可以采用科学技术法形式存储。
(3) 字符类型
关键字 : char 2B
字面值的类型:
a. 用单引号引起来的一个 字符 ,例如:char c = ‘A’; // char c2 = ‘中’;
注意:Java中一个汉字代表一个字符
b. 以整数数值行存储字符内容,整数范围:0~65535
char c = 65;
c. 以 unicode形式存储:char c3 = ‘\u0041’;
转义字符:
\n : 换行
\t : 水平跳格
\ \ : 单个反斜杠
\ ’ : 单引号
\ " : 双引号
注意:此处的符号都是英文符号。
(4) 布尔类型
关键字 : boolean 字面值仅有 true 和 false -》1B(一般不关注)
注意 : Java中的boolean区分于 C中的 boolean ,C语言中的0-false;1-true;但是
Java中的boolean 只能接受 true或是 false,和 0/1没有任何关系。
Java是强类型的语言:对应类型的数据只能存储对应类型的变量中。
-
引用数据类型(对象数据类型)
类、接口、字符串、数组等类型的数据都是引用数据类型。
目前常用的引用数据类型:String
字符串(String):用双引号引起来的一个或是多个字符。 String s = “hello”;
三、数据的自动类型提升
-
两个变量之间相互赋值。自动类型提升规则如下:
(1) byte -> short ->int ->long -> float -> double
小数据类型的变量 可以直接赋值为大数据类型的变量-》自动提升为大数据类型
(2) char - >int ->long ->float->double
-
强制类型转换:
(1) 大数据类型的变量赋值给小数据类型,需要用到强制类型转换
(2) 强制类型转换问语法:
目标类型 变量名 = (目标类型) 源数据类型的变量名;
例如: double d = 12.5;
int i = (int)d;
(3) 强制转换的结果:
a. 小数据类型变量强制转换为整数类型:截断 -》取整数部分
例如: double d = 12.9;
int i = (int)d ; // 结果 12
b. 整数类型的变量中的数据合理,数据强转结果完整
例如: int i = 15;
byte b = (byte) i ; // 结果打印 15
c. 整数类型的变量中的数据不合理,数据强转结果截断
例如: int i = 257;
byte b = (byte)i; // 结果 1
注意: boolean 类型的变量不能参与 数据类型的提升。
-
四、表达式
-
概念:由变量、运算符、字面值等组成一个式子,通常会有一个结果产生。
-
两变量参与运算,表达式的结果类型规则如下:
(1) 如果参与运算的变量有一个为double类型 ,结果就是double类型;
(2) 如果参与运算的变量没有double 类型,有一个为 float 类型 ,结果类型为 float;
(3) 如果参与运算的变量没有 double/float,有一个 为 long类型,结果类型为 long
(4) 其余的情况全都是 int 类型的结果。
例如: byte b = 1;
byte b2 = b + 1; // 编译报错,违反了两个变量参与运算的提升规则,结果应为 int 类型
五、运算符
-
算数运算符: +(加) -(减) *(乘) / (除) %(取模、取余数)
注意: 如果 +两端有一个 数类型为 String(字符串类型),则代表字符串的拼接或是连接。
-
赋值运算符 : = += *= -= /= %=
注意 += 等综合运算符没有自动类型提升。
面试题目:分别写出以下代码编译是否通过,不通过,解释原因,通过,打印结果。
① byte b = 1;
b = b+1; //编译不通过,结果类型应为 int 类型
② byte b = 1;
b += 1; //编译通过,结果为 2
-
一元运算符: ++(自增) --(自减)
(1) a++ : 先 使用 a 原始数据作为表达式的结果,再 将 a 自身加 1; —》先使用,再加1
int a = 1;
int c = a++ ; // int c = a ; a = a+1;
结果 : c = 1; a = 2;
(2) ++a:先将 a 的数据加1运算,再使用 a 中的数据作为表达式的结果。–》先加,再使用
注意:开发时关注于 让变量自身加1运算/减1运算,使用 a++/++a / a–/--a,通常不关注,
两者区别面试题目中的内容。
-
关系运算符
大于: >
大于等于 :>=
小于: <
小于等于:<=
不等于: !=
如果 用关系运算符连接两个变量,用于判断关系是否成立,关系成立-true,关系不成立-flase,
结果类型为boolean类型的表达式称为布尔表达式。
-
逻辑运算符
(1) && :逻辑与,只有当两边都为true的情况下,结果才为true。有一个为false,结果就是false;(短路)
(2) ||:逻辑或,只有两端有一个为true,结果就是为true,同时为false,结果才为false.(短路)
(3) ! : 逻辑非,对结果取反。
(4) & :与,只有当两边都为true的情况下,结果才为true。(非短路)
(5) | :或,只有两端有一个为true,结果就是为true,同时为false,结果才为false.(非短路)
面试题目:写出 && 和 & 的区别。
解析:
相同点:与的关系,两边布尔表达式同时 为 true,结果才为 true.
不同点: && :短路运算符,一旦第一个布尔表达式的结果为 false,后面的布尔表达式不在运算
& :非短路运算符,不管前面的布尔表达式是否为 false,后面的布尔表达式必须执行。
-
条件运算符(三元运算符、三目运算符)
(1) 布尔表达式 ? 表达式1:表达式 2
(2) 执行的原理:如果布尔表达式结果为 true,执行 表达式1,如果为false,执行表达式2。
六、Scanner(扫描仪)
-
使用的步骤:创建扫描仪
java.util.Scanner sc = new java.util.Scanner(System.in);
-
使用:
(1) 输入一个整数: int a = sc.nextInt();
(2) 输入一个小数: double s = sc.nextDouble();
(3) 输入一个字符串:String s = sc.next(); // String s = sc.nextLine();
(4) 输入一个字符:char c = sc.next().charAt(0);