变量和数据类型
本章目标:
- 掌握标识符和关键字
- 掌握变量和常量的使用
- 了解Java中的数据类型
- 掌握数据类型转换
1. 变量、数据类型
1.1 变量(重点)
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.简言之变量就是用来存数的而数据存储的区域叫内存.计算机的内存类似于人的大脑,用来记忆大量运算时需要的数据.
内存是一个物理设备,其原理类似于生活中的旅馆,要存储的数据就好比要住宿的客人.
首先:计算机会根据变量的数据类型为它在内存中分配一块空间,每个空间都有一个独一无二的内存地址(好比根据客人的类型,分配一个合适的房间,而每个房间的房间号都是不一样的);
然后:将变量对应的值(数据)存放在这块空间中(好比客人入住);
运算时,计算机会根据内存地址找到内存空间中存储的数据.但是内存地址不好记,通常用16进制表示。因此,我们给这块内存空间起了一个别名,通常根据别名就能找到对应空间存储的数据.而变量就是一个数据存储空间的表示.
变量对比生活中的旅馆中房间的关系如下:
1.2 Java常用的数据类型
数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格。
数据类型是语言的抽象原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:基本类型和引用数据类型。
- 基本数据类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符、整数和布尔值。
- 引用数据类型:也叫复合数据类型,一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。
注意String属于引用类型
1. 基本数据类型(八大类):
-
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127
-
short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717
-
int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647
-
long:长整型,在内存中占64位,即8个字节,取值范围:(-263~263-1)
-
float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位)
-
double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节
-
char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,
-
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false)
基本数据类型从小到大依次为:
byte,short,char,int,long,float,double
2. 引用数据类型:
数组,类,接口(后期会陆续讲到)
1.3 变量声明以及使用
变量定义的格式包括三个要素: 数据类型 、 变量名 、 数据值 。
格式:
数据类型 变量名 = 数据值;
变量的使用:
代码演示如下:
//定义字节型变量
byte b = 100;
System.out.println(b);
//定义短整型变量
short s = 1000;
System.out.println(s);
//定义整型变量
int i = 123456;
System.out.println(i);
//定义长整型变量
long l = 12345678900L;
System.out.println(l);
//定义单精度浮点型变量
float f = 5.5F;
System.out.println(f);
//定义双精度浮点型变量
double d = 8.5;
System.out.println(d);
//定义布尔型变量
boolean bool = false;
System.out.println(bool);
//定义字符型变量
char c = 'A';
System.out.println(c);
long类型:建议数据后加L表示。 float类型:建议数据后加F表示。
注意事项
- 变量名称:在同一个大括号范围内,变量的名字不可以相同。
- 变量赋值:定义的变量,不赋值不能使用。
1.4 变量命名规则
- 首字母是英文字母、$和下划线,由字母、数字和下划线组成。
- 变量的命名遵循见名知义的原则。
[比如名字就用 name ,而不是用a、b、c这样的命名,不然又要找找找] - 用驼峰命名法命名多个单词组成的变量名。 [比如: sumScore ]
- 变量名[方法名]首字母建议不用大写字母。[首字母大写一般是用来标识类名的] -- 业内规范
- 变量名不要使用Java关键字
备注:
2. 运算符
运算符是一种“功能”符号,用以通知 Java 进行相关的运算。
Java 语言中常用的运算符可分为如下几种:
- Ø 算术运算符
- Ø 赋值运算符
- Ø 比较运算符
- Ø 逻辑运算符
- Ø 条件运算符
2.1 赋值运算符:
赋值运算符是指为变量或常量指定数值的符号。
如可以使用 “=” 将右边的表达式结果赋给左边的操作数。
=,+=,-=,*=,/=,%=
2.2 算术运算符:
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsLuS6zP-1633921731982)(S1_Java_CH02笔记.assets/image-20200922215432223.png)]
备注:
其中,++ 和 – 既可以出现在操作数的左边,也可以出现在右边,但结果是不同滴
a++:先赋值,后自增
++a:先自增,后赋值
自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量!
2.3 比较运算符:
比较运算符用于判断两个数据的大小,例如:大于、等于、不等于。
比较的结果是一个boolean类型的数据( true 或 false )。
Java 中常用的比较运算符如下表所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UwU6N6MM-1633921731983)(S1_Java_CH02笔记.assets/image-20200922215549944.png)]
注意:
> 、 < 、 >= 、 <=
只支持左右两边操作数是数值类型
== 、 !=
两边的操作数既可以是数值类型,也可以是引用类型
2.4 逻辑运算符:
逻辑运算符主要用于进行逻辑运算。
Java 中常用的逻辑运算符如下表所示:
- && 称为逻辑与运算符。只有当符号两边的表达式都为真,结果才为真。简单的说:遇假则假
- || 称为逻辑或操作符。若符号两边的表达式任意一个为真,结果都为真。简单的说:遇真则真
- ! 称为逻辑非运算符。用于取反操。若!后面的表达式为真,则结果为假。简单的说:非真即假
代码演示如下:
public class Test {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b));//a && b = false
System.out.println("a || b = " + (a||b) );//a || b = true
System.out.println("!(a && b) = " + !(a && b));//!(a && b) = true
}
}
补充:
逻辑运算符的不常用的两个符号:
- & 也称为逻辑与运算符.与&&作用一样,当两边的表达式都为true的时候,整个运算结果才为true,否则为false。
但是执行原理不同,&&会出现短路功能,也称为短路与,当第一个表达式的值为false的时候,
则不再计算第二个表达式;&则两个表达式都执行。 - | 也称为逻辑或运算符.与||作用一样,只要有一个表达式true,运算结果就为true;
但是执行原理不同,||会出现短路功能,也称为短路或,当第一个表达式的值为true的时候,
则不再计算第二个表达式;而|则两个表达式都执行。
代码演示&
如下:
int a = 5;
boolean b = a > 7 & a++ > 1;
System.out.println(a);// a = 6;
代码演示|
如下:
int a = 5;
boolean b = a > 3 | a++ > 1;
System.out.println(a);// a = 6;
继续补充:
&
|
还作为位运算符,当& |符号两边的都为数字时,做位运算.
位运算(理解)是程序设计中对位模式按位或二进制数的一元和二元操作。
&
(按位与)是将两个数字转换成二进制进行相应位比较,若相应位置上的值都为1时,返回值的相应位为1,否则为0|
(按位或)是将两个数字转换成二进制进行相应位比较,若相应位置上的值有一个为1时,返回值的相应位为1。否则为0
代码演示如下:
int a = 5&5;// 101 101
System.out.println(a);//结果为二进制的101,转换为十进制是5 故 a=5
int a = 4|1;// 100 001
System.out.println(a);//结果为二进制的101,转换为十进制是5 故 a=5
2.5 条件运算符(三元运算符)
条件运算符也被称为三元运算符。
该运算符有3个表达式,并且需要判断布尔表达式的值。
该运算符的主要是决定哪个值应该赋值给变量。
语法形式:
布尔表达式 ? 表达式1 :表达式2
运算过程:如果布尔表达式的值为true ,则返回表达式1 的值,否则返回 表达式2 的值
示例代码如下:
public class Test {
public static void main(String[] args){
int a , b;
a = 10;
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
System.out.println( "b= " + b );//b=30
// 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
b = (a == 10) ? 20 : 30;
System.out.println( "b= : " + b );//b=20
}
}
2.6 算术运算符的优先级别:
2.7 基本数据类型转换:
为什么需要数据类型转换?
因为计算机对不同的数据类型有不同的保存方式,例如:int(整型) 类型在32位计算机中,占4位。而double(双精度)类型在32位计算机中,占8位。当高位转向低位的时候,如果不进行类型转换,就会造成数据溢出。为保护数据信息,需要进行数据类型转换。
基本数据类型从小到大依次为: byte,short,char,int,long,float,double
类型转换的两种方式:
- 自动类型转换:从小类型到大类型 例如:double d = 10;
- 强制类型转换:从大类型到小类型
语法: (要转换为的类型)变量
例如:int i = (int)10.5;
注意:强转有可能会溢出或精度丢失
类型转换的两点规则:
- 整数直接量可以直接赋值给byte,short,char,但不能超范围
- byte,short,char型数据参与运算时,先一律转换为int再运算
补充Scanner的用法:
-
在package下导入Scanner类:
import java.util.Scanner;
-
在main()方法中,创建Scanner对象
Scanner scan = new Scanner(System.in);
-
获得键盘输入的数据:
System.out.println("请输入年龄:"); int age = scan.nextInt(); System.out.println("请输入单价:"); double price = scan.nextDouble();