目录
布尔类型变量
基本语法:
boolean 变量名 = 初始值;
代码:
boolean a = true;
System.out.println(a);
注意事项:
- boolean类型的变量只有两种取值,true表示真,false表示假。没有c语言里1和0来表示真假的用法。
- Java的boolean类型和其他类型不能相互转换,例如用boolean类型的数据与int类型进行运算就会报错。
- boolean类型有写jvm的实现时占1个字节,有的是占1个比特位没有明确的规定。
字符串类型变量
基本语法格式:
String 变量名 = "初始值";
代码:
String n = "dhasu";
System.out.println(n);
注意事项:
- String是一个引用类型不是基本类型
- 字符串中的一些特定的不太方便直接表示的字符串需要进行转义
- Java使用双引号+若干字符的方式表示字符串字面值
- +号可以用来拼接字符串例如:
System.out.println("hello"+"world");//拼接
System.out.println("hello"+10+20);//结果是hello1020,因为是从左向右读取的首先是hello和10拼接所以变成了字符串hello10,然后再和20拼接所以结果是hello1020
System.out.println(10+20+"hello");//结果是30hello
转义字符
\n:换行
\t:水平制表符
\':单引号
\":双引号
\\:反斜杠
变量的作用域
变量分为成员变量和局部变量,成员变量又分为普通成员变量和静态成员变量。
什么是变量的作用域?
变量的作用域就是变量的作用范围,找变量作用域的时候,就去找变量定义的花括号就可以了。
例子:
class Test{
public static void main(String[] args){
{
a = 99;
System.out.println(a);//编译成功
}
System.out.println(a);//编译失败,找不到变量a
}
}
在Java当中没有所谓的全局变量这样的概念。
变量的命名规则
硬性指标:
- 一个变量名只能包含数字,字母,下划线,美元符号。
- 数字不能开头。
- 变量名是大小写敏感的,例如num和Num是两个不同的变量。
软性指标:
- 变量命名要具有描述性,见名知意。
- 变量名尽量不要使用拼音。
- 变量名的词性推荐使用名词。
- 变量名推荐小驼峰命名法,当一个变量由多个单词组成时,除了当一个单词外,其他单词的首字母都要大写。
常量
常量包含:
- 字面值常量
- final修饰的变量(c语言里是const)
例子:
1.字面值常量
10 //int字面值常量(十进制)
0x10 //int字面值常量(八进制)
0x10 //int字面值常量(16进制)
10L //long字面值常量
true //boolean字面值常量
其他类型就不一一举例了
2.final关键字修饰的常量
final int a = 10;
a = 20; //编译出错,无法为最终变量a分配值
常量不能再程序运行过程中发生修改
常量和变量的区别
- 变量:程序运行的时候,可以改变的量,在程序运行的时候,才知道里面的值是多少
- 常量:在程序运行的过程当中,不可以修改,在程序编译的时候,就已经确定其值是什么了
数据类型转换
总结:
- 不同数字类型(比如整型,浮点型)的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型。
- 如果把范围大的类型赋值给范围小的,要进行强制类型转换,所以可能会发生精度丢失。互不相干的两个类型不能进行强制转换。
- 将一个字面值常量进行赋值的时候,Java会自动针对数字范围进行检查。
- 毫不相干的两种数据类型不能相互进行转换
例子:
int a =10;
double = 1.0
a = b; //报错,可能会损失精度
b = a; //编译通过,int的范围小于double
不同类型
int a = 10;
boolean b = true;
b = a; //编译出错,两种类型不兼容
a = b; //编译出错,两种类型不兼容
强制类型转换
int a = 0;
double b = 10.5;
a = (int)b; //double可以强制类型转换成int,但是结果出现了精度损失,10.5变成了10
int a = 10;
boolean b =true;
b = (boolean)a; //编译出错,类型不兼容
数值提升
- 当int和long混合运算的时候,int会提升成long,得到的结果还是long类型,需要用long类型的变量接收结果,如果非要用int来接收就需要强制类型转换。
- 由于计算机的CPU通常是按照四个字节为单位从内存中读写数据,为了硬件上实现方便,如byte和short这种低于四个字节的类型,会先提升成int,再参与计算。
- 不同类型的数据混合运算,范围小的会先提升成范围大的。
int和String之间的相互转换
int num = 10'
String ret = String.valueOf(num); //使用方法转换
String ret2 = num+""; //通过字符串拼接转换成字符串
String str = "123";
int ret = Integer.valueOf(str); //将String类型的str转换为int,把基本数据类型变成包装类,使用类中的方法来改变数据类型
运算符
- 基本的四则运算:+ - * / %
- 增量赋值运算符:+= -= *= /= %=
- 自增自减运算符: ++ --
注意事项:
- int / int结果还是int,如果想要小数得使用浮点型来计算
- 0不能作为除数,除0会抛出异常(错误)
- %表示取余,或者叫求模,不仅可以对int类型求模也能对小数求模
关系运算符
主要有六个:== != <> <= >=
注意事项:关系运算符的表达式返回值都是boolean类型,要么是true,要么是false,一般是用在if语句。
例子
int a = 10;
int b = 20;
System.out.println(a == b); //false
System.out.println(a != b); //true
System.out.println(a < b); //true
System.out.println(a > b); //false
System.out.println(a <= b); //true
System.out.println(a >= b); //false
逻辑运算符
主要有三个:&& || !
注意事项:
- 逻辑运算符的表达式,操作数和返回值都是boolean
逻辑与 &&:
两个表达式都为true,结果就为true,否则为false
逻辑或 ||:
两个表达式都为false,结果就为false,否则为true
逻辑非 !:
表达式为true,结果为false,表达式为false,结果为true
短路:
- 对于&&,如果左侧表达式的值为false,则表达式整体的值一定为false,此时就不会计算右侧的表达式直接返回结果false
- 对于||,如果左侧的表达式的值为true,则表达式的值一定为true,此时就不会计算右侧表达式直接返回结果true
位运算符
Java中对数据的操作的最小单位不是字节,二十二进制位
位运算符主要有四个:& | ~ ^
- 按位与 &:如果两个二进制位都是1,则结果为1,否则结果为0
- 按位或 |:如果两个二进制位都是0,则结果为0,否则结果为1
- 按位取反 ~:如果该位为0,则结果为1,否则结果为0
- 按位异或 ^:如果两个数字的二进制位相同,则结果为0,否则结果为1
注意事项:
- 位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的,也就是说按照二进制的每一位来依次进行运算
- 当&和|的操作数为整数时,表示按位运算,为boolean时候,表示逻辑运算
- 在运算时要注意操作数的进制,最好对其进行进制转换
移位运算
移位运算符有三个:<< >> >>>
- 左移 <<:最左侧的二进制位舍弃掉,最右侧空出来的地方补0
- 右移 >>:最右侧的二进制位舍弃掉,最左侧补符号位(正数的符号位为0,负数为1)
- 无符号右移 >>>:最右侧的二进制位舍弃掉,最左侧补0
注意事项:
- 都是按照二进制位来运算
- 没有无符号左移
- 由于计算机计算移位效率高于计算乘除,当某个代码刚好乘除2的n次方时可以用来代替运算
- 移动负数位或者移位位数过大都没有意义
条件运算符
只有一个:表达式1?表达式2:表达式3
- 当表达式1的值为true时,整个表达式的值为表达式2的值
- 当表达式1的值为false时,整个表达式的值为表达式3的值
注意事项:这里的表达式都是boolean表达式
表达式优先级
不需要记忆谁的优先级高或者优先级低,只需要根据自己的逻辑加上括号就可以了。