变量介绍
定义
定义:变量是程序的基本组成单位,变(变化)量(值)
变量有三个基本要素:数据类型 + 变量名称 + 值
变量相当于内存中的一个数据存储空间的表示,可以把变量看作是一个房间的门牌号,通过门牌号我们可以找到房间,即通过变量名访问到变量值。
变量快速入门
1、变量表示内存中的一个存储区域【不同的变量,类型不同,占用的空间大小不同,比如int:4字节,double:8字节】
2、变量相当于内存中一个数据存储空间的表示,该空间有自己的名称[变量名]和类型[数据类型]。
3、变量必须先声明,然后再使用。
4、该空间的 数据\值 可以在同一类型范围内不断变化。
5、变量在同一作用域内不能重名。
6、变量 = 变量名 + 值 + 数据类型。
+号的使用
总结: 运算顺序为从左到右。
public class Test{
public static void main(String[] args){
System.out.println(100 + 98); // 198
System.out.println(100 + "98"); // 10098
System.out.println(100 + 3 + "hello"); // 103hello
System.out.println("hello" + 100 + 3); // hello1003
}
}
数据类型
定义
每一种数据都被定义了明确的数据类型,不同的数据类型在内存中分配了不同大小的内存空间「字节」。
总结:
1、Java数据类型分为两大数据类型:基本数据类型 和 引用数据类型
2、基本数据类型有8种:
3、引用类型:类,接口,数组
整数类型
基本介绍
byte n1 = 10; // 1 字节
short n2 = 10; // 2 字节
int n3 = 10; // 4字节
long n4 = 10; // 8字节
以上变量的值虽然相同,但占用空间不同,而且值的取值范围不同
整数类型的使用细节
1、Java各整数类型有固定的范围和字段长度,不受具体操作系统的影响,目的为了保证java程序的可移植性。
2、Java的整型常量默认为 Int 型,声明 long型 常量需在值后面加’l’ 或‘L’。
3、Java程序中变量经常默认声明为int类型,除非数据值非常大,超出Int的取值范围,才会考虑使用long。
4、bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。 1 byte = 8bit
浮点类型
基本介绍
1、浮点数在机器中的存放形式为:浮点数 = 符号位 + 指数位 + 尾数位
2、尾数部分可能丢失,造成精度损失(小数都是近似值)。
使用细节
1、与整数类型相似,Java浮点类型也有固定的范围和字段长度,不受具体操作系统的影响。
2、Java的浮点型常量默认为 double,当声明 float型 常量时,需添加 ‘F’ 或 ‘f’。
3、浮点数常量的两种表现形式: 十进制 和 科学计数法 形式
4、通常情况下使用 double类型。
5、浮点数在判断数值相等时的判断陷阱。
如果是直接查询得到的小数或者赋值的小数,是可以进行相等判断的。
public class FloatDetail{
public static void main(String[] args) {
// Java 的浮点型常量默认为 Double类型, 声明float 类型时, 需加 f 或 F
// float num1 = 1.1; // 对不对? ❌
float num2 = 1.1F; // 对
double num3 = 1.1; // 对
double num4 = 1.1f; // 注意,大字节包含小字节, 没问题。对
// 十进制数形式, 如 5.12. 512.0f .512
double num5 = 5.12;
double num6 = 5.0f;
double num7 = .12; // 0.12
// 科学技术法形式, 如 5.12e2 [5.12的10的2次方] 5.12e-2 [5.12 / 10 / 10]
System.out.println(5.12e2); // 512.0
System.out.println(5.12e-2); // 0.0512
// 浮点数使用陷阱, 2.7 和 8.1 / 3 的比较
double num8 = 2.7;
double num9 = 8.1 / 3;
System.out.println(num9); // 输出的为接近2.7的小数,而不是2.7
// 错误写法
if (num8 == num9){
System.out.println("相等"); // 不会输出结果
}
// 正确写法
if (Math.abs(num9 - num8) <0.000001){
System.out.println("差值非常小&#xff0c;满足规定的精度&#xff0c;认为相等");
}
System.out.println("求差的绝对值" &#43; Math.abs(num9 - num8));
}
}
Java API文档
1、API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;
中文在线文档&#xff1a;
码工具 - 代码在线工具箱
2、Java语言提供了大量的基础类&#xff0c;因此Oracle公司为这些基础类提供了相应的API文档&#xff0c;用于告诉开发者如何使用这些类以及类里包含的方法
字符类型
基本介绍
字符类型可以表示单个字符&#xff0c;char是两个字节&#xff0c;可以存放汉字。
格式&#xff1a; char c1 &#61; ‘张’ 注意使用单引号。
char c1 &#61; &#39;\n&#39;; // 输出换行
char c2 &#61; 97; // 97数字编码对应的字符
使用细节
1、字符使用单引号
2、在Java中&#xff0c;char的本质是一个整数&#xff0c;输出的为Unicode码中对应的字符。
// 在Java中&#xff0c;char的本质是一个整数&#xff0c;输出的为Unicode码中对应的字符。
char c1 &#61; 97;
System.out.println(c1);
char c2 &#61; &#39;a&#39;;
System.out.println((int)c2); // 输出‘a’对应的数字 97
System.out.println(&#39;a&#39; &#43; 10); // 107
3、 char是可以参加运算的。【记住】
System.out.println(&#39;a&#39; &#43; 10); // 107 类型为&#xff1a;class java.lang.Integer
测试
char c5 &#61; &#39;b&#39; &#43; 1;
System.out.println((int)c5); // 输出 99
System.out.println(c5); // 输出值为class java.lang.Character 类型&#xff0c;char 99在Unicode中对应的字符&#xff0c;即输出为 ‘c’
编码
ASCII&#xff1a;由美国人设计&#xff0c;仅有英文单词和一些其他的常用符号&#xff0c;用一个字节表示&#xff0c;一个字节可以表示256个字符&#xff0c;但美国不需要这么多字符&#xff0c;所以最后设计了128个。
Unicode&#xff1a;不论是汉字还是字母&#xff0c;均占用两个字节&#xff0c;这样就造成空间的浪费。【前128个与ASCII码相同。】
utf-8: 汉字用3个字节存储 [汉字比较多&#xff0c;所以使用3个字节才能尽可能多的表示汉字] &#xff0c; 1个字节表示字母
gbk&#xff1a;字母1个字节&#xff0c;汉字2个字节 gbk表示的汉字数量不如utf-8多。
big5码&#xff1a;繁体中文&#xff0c;台湾&#xff0c;香港&#xff0c; 当内容为繁体中文时&#xff0c;转为utf-8会报错&#xff0c;因为在utf-8中找不到对应的字符。
utf8和utf8mb4的区别_骑台风走的博客-CSDN博客_utf8mb4和utf8有什么区别
布尔类型
基本介绍
1、布尔类型数据只允许取值 true 和 false &#xff0c; 无null
2、boolean 类型占 1个字节
3、boolean 类型 适于逻辑运算&#xff0c;一般用于程序流程控制。
注意
不可以 0 或者 非0 的整数代替false和true
数据类型转换
自动数据类型转换
定义&#xff1a;
当java程序在进行赋值或者运算是&#xff0c;精度小的类型自动转换为精度大的数据类型。这个就是自动类型转换。
数据类型按照精度&#xff08;容量&#xff09;大小排序为&#xff1a;
char byte int a &#61; &#39;c&#39;; // 对 char --> int
double d &#61; 80; // 对&#xff0c;输出为80.0 int -- double
注意事项【重点】
1、当多种类型的数据进行混合运算时&#xff0c;系统首先自动将所有数据转换成容量最大的那种数据类型&#xff0c;然后再进行计算。
2、当把精度大的数据类型赋值给精度小的数据类型时&#xff0c;就会报错&#xff0c;反之则类型自动转换。
3、(byte, short) 和 char 之间不会进行自动转换。
3、(byte, short) 和 char 之间不会进行自动转换。
// 当把数据赋值给 byte 时&#xff0c;先判断该数值是否在 byte 范围内&#xff0c;如果在范围内则可以赋值
// 当使用变量进行赋值时&#xff0c;则首先进行类型判断。
byte b1 &#61; 10; // b1 为 byte 类型&#xff0c;而不是默认的 int 类型。
char c1 &#61; b1; // 报错&#xff0c;byte&#xff0c;char 不能自动转为char。
4、byte&#xff0c;short&#xff0c;char 三者间进行运算时首先将类型转换为int。
byte b2 &#61; 1;
byte b3 &#61; 2;
short s1 &#61; 1;
short s2 &#61; b2 &#43; s1; //错误。因为 b2 &#43; s1 &#61;> int &#xff0c;int转为short会有内存损失。
byte b4 &#61; b2 &#43; b3; // 运算结果为int&#xff0c; 报错❌
5、boolean 不参与类型的自动转换
6、自动提升原则&#xff0c;表达式结果的类型自动提升为操作数中的最大类型
byte b4 &#61; 1;
short s3 &#61; 100;
int num200 &#61; 200;
double num300 &#61; 1.1;
double num500 &#61; b4 &#43; s3 &#43; num200 &#43; num300; //输出为最大的类型double类型&#xff0c;。
强制类型转换
介绍
自动类型转换的逆过程&#xff0c;将容量大的数据类型转换为容量小的数据类型。使用时要加上强制类型转换符(), 但注意&#xff0c;可能造成精度降低或溢出&#xff0c;格外要注意。
int i &#61; (int)1.9; // 1 由double转为int
int j &#61; 100;
byte b1 &#61; (byte)j; // 100 类型为&#xff1a;byte
int d &#61; 2000;
byte b2 &#61; (byte)d; // 输出值为-48, 数据溢出
细节
1、强转符号只针对于最近的操作数有效&#xff0c;往往会使用小括号提升优先级
int y &#61; (int)(10 * 3 &#43; 6 * 1.5); // 通过使用小括号提升优先级 double -> int
2、char类型可以保存int的常量值&#xff0c;但不能保存int的变量值&#xff0c;需要进行强转。
char c1 &#61; 100; // 没问题
int m &#61; 100; // 没问题
char c2 &#61; m; // 错误&#xff0c;不能保存int变量值&#xff0c;相当于int类型赋值给char类型&#xff0c;可能数据丢失。
char c3 &#61; (char)m; // 强制转换&#xff0c;没问题
测试
基本数据类型和String类型的转换
转换方法
基本类型转String类型&#xff1a;将基本类型的值 &#43; “” 即可。
String类型转基本数据类型&#xff1a; 通过基本类型的包装类&#xff0c;调用parseXX方法即可。
int n1 &#61; 100;
float f1 &#61; 1.1F;
double d1 &#61; 4.5;
boolean b1 &#61; true;
String s1 &#61; n1 &#43; ""; // 100
String s2 &#61; f1 &#43; ""; // 1.1
String s3 &#61; d1 &#43; ""; // 4.5
String s4 &#61; b1 &#43; ""; // true
String s1 &#61; "123";
byte num1 &#61; Byte.parseByte(s1); // 123
int num2 &#61; Integer.parseInt(s1); // 123
double num3 &#61; Double.parseDouble(s1); // 123.0
short num4 &#61; Short.parseShort(s1); // 123
long num5 &#61; Long.parseLong(s1); // 123
float num6 &#61; Float.parseFloat(s1); // 123.0
boolean b &#61; Boolean.parseBoolean("true"); // true
// 把字符串转为字符 含义&#xff1a;只能把字符串的第一个字符转为字节
s1.charAt(0); // 1
注意事项
1、注意将String类型转为基本类型时&#xff0c;要确保String类型能够转成有效的数据。比如“123”可以转数字&#xff0c;但"hello"就不可以了&#xff0c;
2、格式不正确&#xff0c;就会抛出异常。