目录
一、Java 数据类型介绍
1. 数据类型的分类
→ 数据类型决定数据的存储方式和运算方式
→ Java 中的数据类型分为两大类:基本数据类型、引用类型
① primitive types:byte,short,int,long;float,double;char;boolean
→ Java 中有8种基本数据类型(4类:整数型、浮点数型、逻辑型、字符型)
② reference type:class,interface,数组
【注意】基本类型:变量在栈(这里)
引用类型:变量引用到堆(那里),类似于 C++ 里面的指针
double d = 4;
Person p = new Person();
double d2 = d; // 复制的值
Person p2 = p; // 复制的引用(内存地址,引用到同样的位置)
【注意】赋值时,基本类型复制的值;引用类型复制的是引用
2. 四类基本数据类型
① 逻辑型(1个字节)
boolean b = true; // 只能取 true 或 false
// [注意] 不可以用 零 或 非零来替代 true 或 false
// if (b = 5) 是不允许的
if (b) {
System.out.print("true");
}
→ 关于 true 和 false 的说明:
class JavaBoolean {
public static void main(String[] args) {
boolean a = true; // 编译过后,在计算机中是以 0,1 存储的
boolean b = false; // 但是,在编程时整型和布尔型是不能混淆的
System.out.println(a + ", " + b);
}
}
② 字符型(2个字节)
char c = 'A';
// char c1 = "A"; 不能用双引号
System.out.println(c);
char c2 = '\u4e00';
// Java 字符采用 Unicode 编码,每个字符占两个字节
System.out.println(c2);
→ 转义字符:
【说明】\ddd 1到3位八进制数所表示的字符 ddd;
\uxxxx 1到4位十六进制数所表示的字符 xxxx;
\' \" \\ 分别表示单引号、双引号、反斜杠;
\r 回车 \n 换行 \f 换页 \t 横向制表符 \b 退格;
③ 整数型(整型——4个字节;长整型——8个字节)
// 八进制,0 开头;十六进制 0x 0X 开头;二进制 0b 0B 开头
int i = 3; // Java 语言的整型常量默认为 int 型
long l = 3L; // 声明 long 型常量后可以加 l 或 L
// Java 中没有无符号数 uint 可以用 long 来模拟
【注意】Java 各整数类型有固定的表数范围和字符长度,而不受具体操作系统影响,以保证 Java 程序的可移植性
→ Java 语言整型常量的三种表示形式:
① 十进制整数:如12,-314,0
② 八进制整数:要求以 0 开头,如 012
③ 十六进制整数:要求 0x 或者 0X,如 0x12
④ 二进制整数:以 0b 或 0B 开头,如 0b00010010
【注意】Java 语言的整型常量是 int 型,如 int i = 3;
声明 long 型常量可以后加 l 或 L,如 long l = 3L;
④ 浮点数型(float 型——4个字节;double 型——8个字节)
→ Java 语言浮点类型常量有两种表示形式:
① 十进制数形式,必须含有小数点,如:3.14,314.0,.314
→ Java 7 以上,123_456.789_000(千分位分隔符用下划线表示)
② 科学计数法形式,如:3.14e2,3.14E2,314E2
【注意】Java 浮点型常量默认为 double 型
如果要声明一个常量为 float 型,需要在数字后面加 f 或 F,如:float f = 3.14f;
3. Java 的标识符(Identifier)
→ 由字母、数字、下划线、$ 组成;必须以字母、下划线、$ 开头;对大小写敏感
→ 类名首字母用大写(Pascal);其余的首字母用小写(camel)
→ 常量随使用随定义;尽量少用下划线
二、运算符与表达式
1. 运算符
运算符有算术运算符 + - * / % ++ --;逻辑运算符 & && | || ! ^ ;字符串连接运算符 + 等
① 算术运算符
int a = 15 / 3; // 整数除法
double b = 15 / 2.0; // 实数除法
System.out.println(b);
System.out.println(a % 2);
System.out.println(-a % 2);
System.out.println(a % -2);
System.out.println(-a % -2);
// % 的负符号根据被除数决定
② 逻辑运算符
【注意】区分逻辑运算符和短路逻辑运算符:&& 短路逻辑运算符
public class Main {
public static void main(String[] args) {
MyDate d = new MyDate();
d.setDay(12);
if ((d != null) && (d.getDay() > 31)) {
System.out.print(d.getDay());
}
}
}
class MyDate {
private int day;
public void setDay(int day) {
this.day = day;
}
public int getDay() {
return this.day;
}
}
→ && 第一个操作数为假 → 不判断第二个操作数
→ || 第一个操作数为真 → 不判断第二个操作数
→ ~ & | ^ 根据操作数来确定是逻辑还是数(^ 不是乘方)
System.out.println(1 << 3);
System.out.println(-9 >> 3);
System.out.println(-9 >>> 3); // 无符号右移
③ 位移运算符(适用于 byte、short、char、int、long)
class BitwiseOperator {
public static void main(String[] args) {
int a = 0b1100;
int b = 0b1010;
myPrint("a: ", a);
myPrint("b: ", b);
myPrint("a & b", a & b);
myPrint("a | b", a | b);
myPrint("a ^ b", a ^ b);
myPrint("~a", ~a);
myPrint("a << 2", a << 2);
myPrint("a >> 2", a >> 2);
myPrint("a >>> 2", a >>> 2);
}
static void myPrint(String prefix, int n) {
StringBuilder s = new StringBuilder(Integer.toBinaryString(n));
while (s.length() < 4) {
s.insert(0, "0");
}
System.out.println(prefix + " " + s);
}
}
→ 左移 a << b:将二进制