一.变量
1.整型变量
int num=10;
在java中一个int变量占有4个字节,和操作系统没有直接关系。使用以下语句
System.out.println(Intager.MAX_VALUE);
System.out.println(Intager.MIN_VALUE);
来查询最大值和最小值的范围,大概在-21亿到+21亿,如果运算超出了这个范围就会发生溢出的情况. 而对于大数据时代21亿是很容易发生溢出的,所以java中就提供了long类型.
2.长整型变量
long num=10L;
使用10初始化也可以,10的类型是int.
10L是long类型,也可以写作 10l (小写的L)
在java中一个long汴梁占有8个字节,表示的范围在: -2的63次方到2的63次方-1中。使用以下语句来查询最大值和最小值的范围
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
3.双精度浮点型变量
double num=10.0;
在java中一个double变量占有8个字节,遵守IEEE 754标准.没有办法用有限的内存取表示无限的小数,所以就会存在一定的误差.
如果:
int i=1;
int m=2;
int c=i/m;
这时的c就会等于0,因为int类型的变量除以int类型的变量就会得到int类型的变量,这是就会舍弃小数部分得到整数0,如果你想要更加的精确,就需要使用到double
double i=1.0;
double m=2.0;
这时的i/m就会得到0.5
4.单精度浮点数
float i=1.0f;
在java中float占有4个字节,同样遵守IEEE 754标准.但是由于表示的精度范围比较小,一般情况下都推荐使用 double.
5.字符类型变量
char ch=’a’;
在java中一个char占有2个字节,表示的字符种类更多,包括中文.
当你在javac出现错误时,要注意加上 -encoding utf8
6.字节类型变量
byte num=0;
在java中byte占有1个字节,表示范围比较小,在 -128到127之间
注意字节类型和字符类型不相干
7.短整型变量
short num=0;
在java中short占有两个字节,表示范围比较小,一般不推荐使用.
表示范围在: -32768到+32767
8.布尔类型变量
boolean num=true;
boolean 类型的变量只有 true和false两种取值,其中true表示真,false表示假.所以boolean 在有些JVM中实现是占一个字节,有些只占一个比特位,这个并没有明确规定.java 中boolean 和int之间并不能相互转换.
9.字符串类型变量
String num=”heihei”;
其中String不是基本类型,是引用类型。使用String没法像C语言那样通过取下标的方式来对数组中的元素来进行.在java中,可以通过+来对字符串进行拼接
10.final关键字修饰常量
final int num=10;
常量在程序运行过程中不能发生修改
11.类型的转换
java作为一个强类型的编程语言,当不同类型的变量之间相互赋值的校验。即 long可以赋值给int, 而int的值不能分给long.。通常表示范围范围更小的可以隐式转换为范围较大的类型,反之则不行.如果想把int转换为long则需要强制类型转换,但是可能精度会丢失,将一个字面值常量进行赋值时,java会自动对数字范围进行检查.
12.数值提升
int和long
int a=10;
int b=20;
long c=a+b;
当int和long进行混合运算时,int会提升为long,得到的结果仍为long类型.不同类型的数据混合运算,范围小的会提升为范围大的.如果long类型的量作为加数,int类型的量作为接收的值,则需要使用到强制类型转换。
byte i=10;
byte n=20;
byte c=i+n;
这样的代码也会报错,这是因为在计算i+n时,i和n都提升为int类型再进行计算,得到的也为int类型. 改byte c=(byte)(i+n)
注意:由于计算机的CPU通常按照4个字节为单位从内存中读取数据.为了硬件上实行方便,如:byte和short这种的,会先提升为int再参与运算.
二.运算符
1.算数运算符
基本四则运算符 + - * / %
1).int除int还是int,如果需要更精确的小数部分,则需要double来进行运算.
2)0不能作为除数
3)%为求余操作,不但能对int类型的数据进行操作,还能对double类型的数据来进行操作
增值运算符 += -= *= /= %=
自增/自减运算符 ++ –
1).如果不取自增运算符的返回值,则前置自增还是后置自增没有区别
2)如果取自增运算的返回值,则前置自增时自增之后的值,后置自增是自增之前的值
2.关系运算符
== != < > <= >=
java中关系运算符的返回值为boolean类型
3.逻辑运算符
1).逻辑与: &&
两个操作数都为true,结果为true,否则为false
2).逻辑或: ||
两个操作数都为false,结果为false,否则为true
3).逻辑非: !
单目运算符,操作数为true,结果为false. 操作数为true结果为false.
4).短路求值
A.对于&&,如果左侧表达式为false,则表达式整体的值一定为false,无需计算右侧
B.对于||,如果左侧表达式为true,则表达式整体的值一定为true,无需计算右侧
5).&和|
&: 在java中,即是逻辑于又是按位与. 在&两侧的操作数都是boolean,行为就是逻辑与,没有短路求值规则. 在&两侧的操作数都是int/long,行为就是按位与
|: 在java中,即是逻辑或又是按位或. 在|两侧的操作数都是boolean,行为就是逻辑或,没有短路求值规则. 在|两侧的操作数都是int/long,行为就是按位或。
4.位运算符
位操作表示按二进制位运算.计算机中都是用二进制来表示数据的,按位运算就是在按照二进制位的每一位依次进行计算
1).按位与:&
如果两个二进制位为1,结果为1,否则为0
2).按位或:|
如果两个二进制位为0,结果为0,否则为1
3).按位取反: ~
1变为0, 0变为1.
4).按位异或: ^
两个二进制位相异为1,相同为0.
5.移位运算
都是按照二进制位来运算
左移<<: 最左侧位不要,最右侧补0,每左移一位相当于乘以一个2.
算数右移>>: 最左侧补符号位,每右移一位相当于除以一个2.
逻辑右移>>>: 左侧补0.
6.条件运算符
表达式1?表达式2:表达式3
判断表达式1是否成立,成立执行表达式2,不成立执行表达式3.
这是java中唯一的一个三目运算符,是条件判断语句的简化写法.