小白的Java学习之旅------变量 数据类型 表达式
变量
1、什么是变量?
概念:内存中的一块空间,可以存放数据,简单来说,就是“数据的家”。
硬盘(外存):数据会永久的存放在计算机中。
内存条(内存):程序运行时会加载一些数据,这些数据
一般会随着程序的结束而被释放掉,不会永久的保存在计算机中。
通俗的理解:
变量 ------>酒店
变量名 ------>酒店的房间
变量类型---->酒店的房间类型(标准房、总统套房)
变量值 ------>房间里的杂物或人
2、变量的三要素:变量名、变量中存放的数据类型、变量值
3、定义变量:
变量的声明:变量的数据类型 变量名
变量的赋值:变量名 = 变量值 (“=”赋值号,“==”等号)
4、变量的使用:
System.out.println(变量名)
注意:这里切记括号里不要加引号!!!
5、定义变量的方式:
方法一:先声明,在赋值
例:int a; //声明
a = 5; //赋值
方法二:声明的同时给变量赋值
例:int a = 5;
方法三:同时声明多个相同类型,可以不赋值也可以只赋一个初值还可以赋多个初值
例:int a,b,c = 10;
数据类型
6.数据类型
基本数据类型(4种)
- 整型(4种)
类型 | 字节 | 表示范围 |
---|---|---|
byte | 1 | -128~127 |
short | 2 | -32768~32767 |
int | 4 | -2147483648~2147483647 |
long | 8 | 了解 |
public class V{
public static void main(String[] args){
int a = 10;
System.out.println(a);
byte b = 12;
System.out.println(b);
short s = 127;
System.out.println(s);
long l = 2147483648L;
System.out.println(l);
}
}
- 小数点类型(浮点型):
类型 | 字节 |
---|---|
float(单精度) | 4 |
double(双精度) | 8 |
double类型变量定义时,需要在变量值后面添加d/D
public class V{
public static void main(String[] args){
float f = 24.3F;
System.out.println(f);
double d = 29.78D;
System.out.println(d);
}
}
面试题:int和float都占4个字节,那么谁的表示范围大?
答:float采用科学计数法,所以比整型表示的范围大。
测试代码如下:
public class V{
public static void main(String[] args){
int i = 2147483647;
System.out.println(i);
float f = 2147483648F;
System.out.println(f);
//结果:2.14748365E9 科学计数法 E代表10 E后面的代表指数
}
}
- 字符类型:
类型 | 字节 | 范围 |
---|---|---|
char | 2 | 0~65535 |
1.直接用单引号赋值
char c = 'A';
2.用数值进行赋值
char c = 65;
常用的ASCII值A:65 a:97 之间相差32
3.Unicode编码(十六进制)
char c = '\u0041'
转义字符:
\\ 反斜杠
\' 单引号
\" 双引号
\n 换行符
\t 制表符
- 布尔类型:
boolean :
值的形式:true(真) false(假) - 引用数据类型:
String(字符串类型)用双引号括起来
语法:数据类型 变量名 = 字符串
案例:
public class Hello{
public static void main(String[] args){
String s = "Hello World";
System.out.println(s);
}
}
7.数据类型之间的转换
- 自动类型的提升
条件:
1.数据类型互相兼容
2.小范围数据赋值给大范围数
两条线:
byte—>short—>int—>long—>float—>double
char—>int—>long—>float—>double
案例:
public class Test{
public static void main(String[] args){
byte b = 14;
int i = b;
char c = 'A';
i = c;
System.out.print(i);
}
}
- 强制类型转换:
条件:
1.数据类型互相兼容
2.大范围数据赋值给小范围数据
语法:
原数据类型 变量名1 = 变量值;
目标数据类型 变量名2 = (目标数据类型)变量名1;
案例1:
public class Test{
public static void main(String[] args){
int i = 128;
byte b = (byte)i;
System.out.print(i);
}
}
案例2:
public class Test{
public static void main(String[] args){
float f =12.5F;
int i = (int)f;
System.out.print(i);
}
}
注意:小数类型转换成整数类型,直接将小数点后的部分舍去。
总结:强制类型转换会损失精度。
表达式
1.概念:由变量、 运算符和字面值组成的一个式子,每一个表达式都有一个值
在表达式计算中也存在数据类型转换
规则:
1.如果有一个double 结果提升为double
2.如果有一个float 结果提升为float
3.如果有一个long 结果提升为long
4.其他情况都为int
运算符
1.算术运算符: +、-、*、/(取商的值)、%(取余的值)
注意:字符串连接符号“+”
当字符串和其他变量或字面值用“+”连接时,字符串左右的值都会以字符串的形式和这个字符串连接
案例:
public class Hello{
public static void main(String[] args){
String s = "班日后必定辉煌";
System.out.println(3+4+s);//7班日后必定辉煌
System.out.println(s+3+4);//班日后必定辉煌34
}
}
2.赋值运算符:=、+=、-=、*=、/=、%=
案例1:
public class Hello{
public static void main(String[] args){
int a = 3;
//a = a+1;//等价于a+=1
a+=1;
System.out.println(a);//4
}
}
案例2:
当赋值运算符+=、-=、*=、/=、%=的时候,不回进行类型提升
public class Hello{
public static void main(String[] args){
byte b = 5;
//b = b+1;这是错误的
//int c = b+1;
//b = (byte)(b+1);//第二种解决方式
b+=1;
System.out.println(b);
}
}
3.自增自减运算符:
++:----> a=+1;
注意:
- a++和++a都是对a进行加1的操作,没有区别。
- a–和--a 对于a来说都是在a的基础上减去1的操作
练习:
public class Hello{
public static void main(String[] args){
int a = 5;
int b = (a++)+(--a)+(a--);
System.out.println(b);//15
System.out.println(a);//4
}
}
4.关系运算符:>、>=、<、<=、!=、==
用关系运算符得出的结果是布尔类型的值 true / false
5.逻辑运算符:
& 与:当运算符两边的值都为true 那么这个表达式的值为true,反之为false
&& 短路与
| 短路或
! 非 :!true = = false
!false = = true
案例:
与和短路的区别
public class Hello{
public static void main(String[] args){
int a = 5;
int b = 4;
// false true
System.out.println(a<b)&(++a==7);//false
System.out.println(a);//7
// 短路与 false直接短路 后边不执行
System.out.println((a<b)&&(++a==7));//false
System.out.println(a);//6
}
}
或和短路或
public class Hello{
public static void main(String[] args){
int a = 6;
int b = 4;
// true false
System.out.println((a>b)|(++a!=7));//false
System.out.println(a);//7
// true
System.out.println((a>b)||(++a!=7));//true
System.out.println(a);//6
}
}
6.三元运算符
语法:布尔表达式?值1:值2;
如果布尔表达式的值为true,则表达式的值取1;否则取值2
案例:
public class Hello{
public static void main(String[] args){
int a = 4;
int b = 7;
int c = a>b?a:b;
System.out.println(c);//7
}
}
7.运算符的优先级