一、数据类型和变量
变量指的是程序运行时可变的量,相当于开辟一块内存空间来保存一些数据。
类型是对变量的种类进行了划分,不同类型的变量具有不同的特性。
1、8大基本类型、String类型
每个基本类型都有其固定的表示关键字、包装类,占用的字节大小以及数据范围。
基本类型在定义时,基本语法格式相似,在赋值时会有所不同。
1.1.整型变量(int)
基本语法格式:
int a=100;//定义一个整型变量a,并给它赋初值100;
整型是有一定的数据范围的,可以使用以下代码查看最大值和最小值;
System.out.println(Integer.MAX_VALUE);//打印输出整型int的最大值;
System.out.println(Integer.MIN_VALUE);//打印输出整型int的最小值
//执行结果
2147483647
-2147483648
如果在运算中超出了数据范围,就会出现溢出的情况
int maxValue=Integer.MAX_VALUE;
int minValue=Integer.MIN_VALUE;
System.out.println(maxValue+1);//打印输出整型int的最大值;
System.out.println(minValue+1);//打印输出整型int的最大值
//执行结果
-2147483648
-2147483647
int的数据范围在现实生活中很明显是不够用的,很容易就会造成数据溢出,针对这种情况,Java中提供了long类型
1.2.long类型
long类型的基本语法格式与int类型相似,需要注意的是,在定义一个long类型的变量,给其赋值的时候,需要在数值后面加上字母L(或小写的L)。
long num1 = 100l;
long num2 = 100L;
同样可以使用以下代码查看Java中long类型的数据范围:
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
1.3.双精度浮点型变量(double)
基本语法格式与整型相同。
在Java中,int与int相除的值仍然是int,这就导致很多相除之后结果中存在小数的,小数部分会自动舍弃
int a=5;
int b=2;
System.out.println(a / b);
//执行结果
2
如果想要精确值,就可以利用double类型进行运算
double a=5;
double b=2;
System.out.println(a / b);
//运行结果
2.5
注意:
double num=1.1;
System.out.println(num*num);
//运行结果
1.2100000000000002
这是因为double类型的内存布局遵守IEEE 754标准,尝试是用有限的内存空间表示可能无限的小数,就会存在一定的误差,但是这种情况很少会出现。
出现这种问题时,有两种解决方式
a.使用小数点后六位为有效值
b.使用BigDecimal类(不推荐使用)
BigDecimal详解
1.4.单精度浮点型(float)(不太推荐使用)
float num1=1.1f;
float num2=1.1F;
同样遵守IEEE 754标准,但是由于表示的数据精度范围较少,一般在工程上优先考虑double。
1.5.字符型(char)
在对字符型变量赋值时,需要使用 ’ ’
char ch = 'b';
char ch1 = '哈';
注意:
计算机本质上时一个整数,在C语言中使用ASCII表示字符,Java中使用Unicode表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文。
1.6.字节类型(byte)
1.7.短整型(short)
1.8.布尔类型(boolean)
注意事项:
1.9.字符串类型(非基本类型)(String)
把一些字符放在一起就构成了字符串。
String ret="初始值";
String ret1="chushizhi";
注意:
a.在定义字符串类型时使用 " ",同时首字母s大写 ;
b.String不是基本类型,是引用类型
c.对于一些特定的不太方便表示的字符需要进行转义
常用的转义字符表:
例如:
//输出\"张三"\
String ret="\\\"张三\"\\";
System.out.println(ret);
字符串的 + 操作
String a="hello";
String b="world";
String c=a+b;
System.out.println(c);
//输出结果
helloworld
//也可以字符串连接整数
String a="hello";
int b=2022;
int d=404;
String c=a+b+d;
System.out.println(c);
//输出结果
hello2022404
2.变量
2.1.变量的作用域
定义一个变量以后,这个变量能生效的范围,一般是变量定义所在的代码块,即 { }包括的范围。
例
public class work_4_4 {
public static void main(String[] args) {
//计算1+2+...+10的值
int sum=0;
for (int i = 0; i <=10; i++) {
sum+=i;
}
System.out.println(sum);
System.out.println(i);
}
}
运行这个程序的就会报错,因为i是在for循环中定义的一个变量,当for循环结束的时候i就消失了,即在for循环的{}外面,就无法调用,而sum是在外面整个的{}中定义的,因此可以在这个{}中的代码片段中进行调用。
2.2.变量的命名规则
5.不能使用Java中的关键词命名。
2.3.常量
常量是指在运行过程中,其类型不会发生变化的量。
常量主要有以下两种方式:
1.字面值常量
2.final关键字修饰的常量
final int a=10;
a=20;
//编译出错,提示:
java: 无法为最终变量a分配值
注意:
二、运算符
1.算术运算符
1.1.基本四则运算符(+、-、*)
1.同时,int/int时,结果还是int,需要使用double来计算。
2.在int类型中,/ 表示取整操作,%表示取余操作。
例如
int a=123;
System.out.println(a / 10);
System.out.println(a % 10);
//运行结果
12
3
3.%也可以对double进行求模
double a = 11.5;
System.out.println(a % 10.0);
//运行结果
1.5
1.2增量赋值运算符(+= -= *= /= %= )
int a = 2;
a += 2;//等于a=a+2;
System.out.println(a);
//运算结果
4
1.3.自增/自减运算符(++ --)
int a = 2;
int b=a++;// 等于 b=a->a+1;此时 b=2,a=3;
int c=++a;//等于 a+1->c=a;此时 c=4,a=4;
int d=a--;//等于 d=a->a-1;此时 d=4,a=3;
int e=--a;//等于 a-1->e=a;此时 e=2,a=2
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
//输出结果
2
2
4
4
2
2.关系运算符
关系运算符返回的是布尔类型的值,即true或false。
关系运算符有六个
int a = 10;
int b = 20;
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a < b);
System.out.println(a > b);
System.out.println(a <= b);
System.out.println(a >= b);
//运算结果
false
true
true
false
true
false
3.逻辑运算符
逻辑运算符主要有三个
逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean。
3.1.逻辑与&&、逻辑或||、逻辑非!
int a = 10;
int b = 20;
int c=30;
System.out.println(!(a < b && a < c));
System.out.println(!(a > b || a > c));
//运行结果
false
true
3.2.短路求值
System.out.println(10 > 20 && 10/0==0);
System.out.println(10 < 20 || 10/0==0);
0不能作为除数,因此运行10/0时程序一定会报错,然而上面这串代码没有报错,说明10/0==0,这部分并没有运行
结论:
而&和|在使用过程中,不支持短路求值,因此不推荐使用。
4.位运算符
位运算符主要有四个:
Java中对数据的操作的最小单位不是字节,而是二进制位。
位操作表示按照二进制位运算,计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行运算。
4.1.按位与&、按位或|、按位异或^
4.2.按位取反
规则:如果该位为0则转化为1,如果该位为1,则转化为0.
结果:
5.条件运算符(三目运算符)
条件运算符只有一个:
规则
int a=1,b=2,c=3;
int Max=a>b?a>c?a:c:b>c?b:c;
int Min=a<b?a<c?a:c:b<c?b:c;
System.out.println(Max);
System.out.println(Min);
6.移位运算(<< >> >>>)
移位运算按照二进制来运算
注意:
6.1.左移(<<)
规则:
int a=0x10;
System.out.printf("%x\n",a<<1);//输出20
6.2.右移(>>)
规则:
6.3.无符号右移(>>>)
规则;