变量
1、概念
计算机中的一块存储空间,用于存放数据,是数据存储的基本单元。
2、组成
变量 = 数据类型 + 变量名 + 数据
3、变量的定义
(1)先声明,后赋值。
数据类型 变量名;
变量名 = 数据;
(2)声明的同时赋值
数据类型 变量名 = 数据;
(3)同时定义多个同类型变量
数据类型 变量名1,变量名2 = 数据,变量名3;
数据类型
1、基本数据类型
概念:也被称为简单数据类型,有8种
整数类型(整型)
- byte:占用1字节(1B)-128~127
- short:占用2个字节(2B)
- int:占用4个字节空间(4B)
- long:占用8个字节空间(8B)
【1B = 8 bit】
【long类型的数据后面需要添加L或者l】
字面值:程序中用来为变量赋值的具体类型数据
小数类型(浮点型)
单精度浮点类型——float(6位小数)
占用4B空间,提供了科学计数法表示数据,没有数据范围。
【float类型后必须跟F或者f】
双精度浮点类型——double(15位小数)
占用8B空间,提供了科学计数法表示数据,没有数据范围。
注:科学计数法E19表示乘10的19次方
float采用科学计数法,所以存储范围比long大
字符类型
char:占用2B空间
字面量表示:
1)使用单引号引起来的字符
char a = 'A';
char b = '中';
注:Java里每个字符占2B空间,足够存放中文汉字,一个汉字是一个字符。
2)使用整数数值来表示字符字面值 【范围0~65535】
char c = 65;
3)Java默认编码方式为unicode编码,字面值以unicode码存储
char d = '\u0041';
4)'\n’换行 '\t’空格 '\'表示/ ‘’'单引号 '"'一个双引号
char v1 = '\n';
char v2 = '\t';
char v3 = '\\';
char v4 = '\'';
char v5 = '\"';
布尔类型
boolean,其字面值仅有true和false,占一个字节空间。
2、引用数据类型
类、接口、字符串、数组等类型的数据都是引用数据类型。
目前常用的引用类型String字符串
String:定义时使用双引号引起来一个或多个字符。
String str = "Hello";
数据的自动类型提升
1、两个变量之间相互赋值
自动类型提升规则:
1.小范围数据类型的变量可以直接赋值给大范围数据类型的变量
byte–>short–>int–>long–>float–>double
2.char类型的自动提升
char–>int–>long–>float–>double
2、强制类型转换
场合:将大数据变量赋值给小数据类型变量,赋值过程中需要用到强制类型转换。
目标数据类型 变量名 = (目标数据类型) 原数据类型变量名;
int b1 = 5000;
byte b2 = (byte)b1;
System.out.println(b2);
结果:
1)整数类型的变量中的数据合理,数据强转结果不变。
2)若大数据类型变量值超过小数据类型范围,则会截断高位。
3)小数(浮点类型)强制转换成整数类型时,截断取整。
表达式
1、概念
由字面值、运算符、变量组成的式子称为“表达式”,一个正确的表达式通常会有一个确定的结果数据。
2、结果类型判定规则
1)若表达式内有一个double类型,结果定为double类型。
2)若没有double,查看是否有float,如果有则为float。
3)若没有double、float要看有没有long,有则是long。
4)若double、float、long都没有,则是int。
面试题:下面程序是否编译通过,通过给出结果,否则请说明错误原因。
byte b = 1;
b = b + 1;
解答:错误。
当进行b + 1时,得到结果为int类型,所以无法用byte类型接收。
byte b = 1;
int c = b + 1;
运算符
1、算术运算符
符号:+ - * / %(取余)
注意:Java中 + 有两种应用
(1)如果 + 两端都是数值类型(整数、小数、char)则 + 做加法运算使用。
(2)如果 + 两端出现一个或者两个String类型,则 + 作为拼接符使用。
【boolean不进行任何运算】
//测试算术符号:符合表达式结果判定规则
System.out.println(15 / 2);//结果int类型7
System.out.println(15 % 2);//结果int类型1
System.out.println(15 / 2.0);//结果double类型7.5
System.out.println(15.0 / 0);//indinity
System.out.println('B' - 1);//结果为int类型65
System.out.println("hello" + "world");//helloworld
System.out.println(4 + "3");//结果是字符串"43"
System.out.println(3 + 4 + "5");//结果为字符串"75"
int a = 10;
int b = 20;
System.out.println("a+b=" + a + b); //输出"a+b=1020"
System.out.println("a+b=" + (a + b));//输出"a+b=30
2、赋值运算符
符号:= += -= *= /= %=
//从右向左,先计算=右边的结果数据,再赋值给左边
int a = 3;
//复合赋值运算符号
a += 10;
//相当于
a = a + 10
a *= 10;
//相当于
a = a * 10
注意:
byte b = 1;
b = b + 1; //编译报错,结果是int类型,无法赋值给byte
b += 1; //编译通过,
//在Java里,应用层+=不再具有自动类型提升功能;
//底层实际操作:b + 1 -->int 再将int类型强制转换成byte类型
3、一元运算符
符号:++ (自增) – (自减)
(1) a ++ 或者++ a 代表在a变量原值的基础上自增1
(2) a – 或者-- a 代表在a变量原值的基础上自减1
a++和++a的区别:
在运算过程中,有两个值出现,一个是整个表达式的结果,一个是a的原值改变。
a ++:先获取a的原值作为整个表达式的结果,再对a自加。
++a:先对a的数据加1,再获取a的当前值作为整个表达式的结果使用。
面试题:
请说出下列表达式result的结果
int a = 3;
int result = a ++ + (a ++) + (a ++);
//a 4 5 6
//result 3+4+5=12
int result = (++ a) + (++ a) +(++ a);
//a 4 5 6
//result 4+5+6=15
int result = (a ++) + (++ a) + (a ++);
//a 4 5 6
//result 3+5+5=13
4、关系运算符
符号:> < >= <= == !=
注意:
(1)关系运算符连接表达式,若关系成立,则结果为true;若关系不成立则为false;
(2)关系运算符连接到表达式被称为"布尔表达式";
(3)不支持数学长等式
5、逻辑运算符
逻辑运算符连接的表达式是布尔表达式
符号:
&& : 两端连接的是布尔表达式或者布尔值,当两个boolean都为true时,则最终表达式结果为true。只要有一个值为false,则最终结果为false。
例如:true && false -->false
|| : 两端连接的布尔值或者布尔表达式只要有一个为true,结果为true,只有两端的值同时为false,结果为false。
例如:true || false -->true
(age > 18) || (age < 60) -->任意为true
!: 在原有布尔表达式或者布尔值的结果上取反
例如: !(3 > 4) -->true
注意:&& ||也被称为"断路逻辑符号",如果第一个布尔表达式已经可以判断出最终表达式的结果,则不再运算第二个布尔表达式。
例如: (3 > 4) && (4 > 5)—>false && xxx —>false
(4 > 3) || (4 > 5)—>true || xxx —>true
(3 > 4) || (5 > 4)—>false || true —>true
int a = 10;
boolean b = (a > 11) && (++ a == 11);
System.out.println("b = " + b); //false
System.out.println("a = " + a); //10
6、三目运算符
语法:布尔表达式 ? 表达式1 :表达式2
执行原理:如果布尔表达式为true则执行表达式1,将表达式1的结果作为整个表达式的最终结果,否则执行表达式2。
int k = 6, j = 4;
System.out.println((k > j) ? 3 : 4.0); //3.0
注意:结果类型符合之前表达式结果类型判定规则。