一、数据类型
1. 整形(int&long)
- int 不管是多少位的操作系统,永远是 4 个字节。所以 Java 的可移植性强,且是跨平台的
- Java 中的 int 没有所谓的无符号,统一都是有符号的
- 取值范围:-2 ^ 31 — 2 ^ 31 - 1
查看 int 的最大最小值:
public class HelloWorld {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v7WcdJIh-1634478220154)(assets/image-20211013204346-3v3q0ib.png)]
-
变量的命名:小驼峰格式。变量名由下划线、数字、字母、美元符号等组成,不能以数字开头。
- 详细看《阿里巴巴 Java 开发手册》
- 最好用英文,不要用拼音(不会的翻译一下)
-
变量定义必须初始化。
- Java 比较安全,如果不初始化就使用,会直接报错(编译不通过)
-
long 是长整形,64 位;
- Java 中没有 long long 类型!!!
- 如何定义 long 类型变量
long a = 10L;
//这里最好加一个L(不要小写,容易与1弄混淆)
-
short(短整型,一般不用)
- 一个 short 变量占两个字节
- 第一个为符号位
- 范围:-32768 — 32768(-2 ^ 15 — 2 ^ 15 - 1)
2. 浮点数
- double(8 个字节)
-
注意:不能用两个 int 做除法 -
正确写法: public static void main(String[] args) {
double a = 1.0;
double b = 2.0;
System.out.println(a / b);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GoDxs3Ju-1634478220161)(assets/image-20211013205538-kauciyl.png)] -
错误写法: int a = 1;
int b = 2.0;
System.out.println(a / b);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jVQCnU0Q-1634478220164)(assets/image-20211013205820-o4lpuyc.png)] - float(4 个字节)
-
浮点运算时类型一定要匹配,否则编译过不去(double 与 float 也不能混用) float a = 1.1;
System.out.println(a);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DN8A3dHR-1634478220167)(assets/image-20211013210318-atq7yzt.png)] -
正确写法:(必须在浮点数后加 f) float a = 1.1f;
System.out.println(a);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkXDOrJv-1634478220169)(assets/image-20211013210405-v2y40h5.png)] -
Java 中没有 C 语言中截断的概念
3. 字符类型
- char
- 一个 char 类型占用两个字节
- 可以直接给一个 char 类型变量赋值一个汉字(只需要加上 utf-8 编码)
- 范围:-2 ^16 — 2 ^ 26 - 1
- byte(字节类型)
- 一个 byte 类型只占用一个字节(8bit)
- 相当于 C 语言中的 char
- 存储范围(-128 – 127)
4. 布尔类型(boolean)
- boolean,只有两个取值,true 和 false。
- 不存在与其他类型的转换,如 C 语言中的: 1 表示 true,0 表示 false 。
- 同样,boolean 类型也不能 +1-1 这种操作
- 在 JVM 的规范中,没有规定布尔类型的大小,有的 1bit,有的 1 字节
5. 字符串类型(String)
-
注意大小写,String -
拼接
- 字符串之间的拼接
- 其他类型和字符串的拼接
- 字符串在前,其他数据类型会被转化为字符串
- 其他数据在遇到字符串之前数据类型不会改变,但是一旦遇到字符串,就会变成字符串类型。
System.out.println("hello"+"world");
System.out.println("hello"+10+20);
System.out.println(10+20+"hello");
System.out.println("hello"+(10+20));
System.out.println(10 + "" + 20 +"world");
System.out.println("a="+10+", b="+20);
6. 转义字符
- 与 C 语言类似
- \n 换行
- \t 水平制表符
- \'单引号
- \"双引号
- \\反斜杠
String s1 = "\"bit\"";
String s2 = "\\bit\\";
String s3 = "\\\\bit\\\\";
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
二、变量
1. 变量
- 程序运行的时候可以改变的量
- 在程序运行的时候才能知道值是几(对比常量)
- Java 中没有所谓全局变量的概念!!!
- 成员变量(定义在类的内部,方法的外部)
- 普通成员变量
- 静态成员变量
- 局部变量
2. 变量的作用域
变量的作用范围
3. 变量的命名规则
- 只能包含:字母、数字、下划线、美元符号
- 变量名是大小写敏感的,num 和 Num 是不同的变量
- 数字不能开头
- 其他建议
- 建议统一小驼峰:maxNum
- 中文和 美元符号 $ 合法,但非常不推荐使用
4. 常量
- 字面值常量:1, 2.1,“hello”…
- final 修饰的常量(类似 C 语言中的 const)
- 程序运行中不可以修改的量,只能初始化一次
- 在程序编译的时候,就已经确定了其值。(对比变量)
5. 类型转换(与 C 不同)
- 不同数字类型(int long double 等)的变量之间赋值
- 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行
- 如 int->long 可以,但 long->int 不行
- 可以强制类型转换(有风险,非常不建议)
- 与 c 语言相同
-
long l = 0;
int c = (int)l;
- int 与 boolean
- int 与 boolean 类型不能相互强转
- 这两个是完全不相干的两种类型,不能相互赋值
- int 字面常量给 byte 赋值
- byte 范围:-128 — +127
- 字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理
- 注意:类型提升的问题
-
下面这个情况会编译失败 byte a = 1;
byte b = 2;
byte c = (byte)a+b;
- 这是因为 CPU 中进行加法运算的时候,会把不足 4 位的变量提升为 int 类型。(类型提升)
-
要用到强制类型转换 byte a = 1;
byte b = 2;
byte c = (byte)(a+b);
-
总结
- 不同类型的数据混合运算, 范围小的会提升成范围大的
- . 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
- int 与 String 的转换
三、运算符
1. 算数运算符
- 基本算数运算符:+ - * /
-
注意除法: /
- int / int 还是 int,用小数需要用 double
- 除数不能为 0(java 会检查)
- 否则会抛出异常(算数异常)
-
% 表示取余,
- 不仅仅可以对 int 求模, 也能对 double 来求模
System.out.println(11.5%2.0);
System.out.println(-10%3);
System.out.println(10%-3);
System.out.println(-10%-3);
-
-=, +=, *=, /=
short a = 0;
a += 9;
- 关系运算符
- == != < > <= >=
- 所有关系运算符的返回值都是 boolean 表达式
- 自增/自减运算符(与 C 语言完全一致)
- 注意 a++ 与 ++a 的区别
- 布尔表达式
- 逻辑与:&& ,逻辑或: ||,逻辑非:!
- 逻辑符号两边(!是单边)必须都是布尔表达式
- 如!a<b 是错误的,因为 a 不是布尔表达式
- !(a<b)才正确
- 短路运算
- 如 println(10 > 20 && 10 / 0 == 0),后半部分不会运行,不会报错。
- 位运算符
- 按位与:&
- 全一为 1,有一个不为 1 就是 0
- 按位或: |
- 对应位如果有 1,则结果为 1。
- 按位异或:^
- 相同为 0,不同为 1
- 按位取反:~(键盘 esc 下面的健 +shift)
- 0 变 1,1 变 0
- 移位运算符
-
<< 左移
- 左移,右侧补 0
- 左移一位相当于*2
-
右移
- 右移,补符号位
- 右移一位相当于 / 2
-
无符号右移
- 不管符号位是 0 还是 1,左边统统补 0
- 条件运算符(三目运算符)
- 表达式 1?表达式 2:表达式 3
- 表达式 1 必须为布尔表达式
- 表达式 1 为真返回表达式 2,为假返回表达式 2
|