在线咨询 400-826-1668
回到顶部
ARTICLE DETAIL

资讯详情

深耕国风建站与运营引流的一线实战洞察。

一篇文章弄懂Java8大基本数据类型(非常详细,简单易懂)

一篇文章弄懂Java8大基本数据类型(非常详细,简单易懂) 第五为知识点里用到的一些知识点的讲解可以先看五一.整数类型1.byte类型基本概念专门用于处理单字节数据空间占用为1个字节(8位二进制)取值范围-128至127一个字节由8位二进制组成首位是符号位其后的7位是数值位。在 计算正数 的范围时最大值为1111111通过二进制转换为十进制的公式得出最大正数。十进制转二进制为了找到byte类型所能表示的最小负数我们来考察8位二进制数10000000。由于其最高位 为 1因此它表示一个负数。为了求得其对应的十进制值我们需要先计 算出它的补码 以获取其绝对值。对10000000按位取反得到01111111之后再加1得到10000000将 其转换为十进制即为128默认值当byte类型作为类的成员变量且未显式初始化时其默认值是 0声明与初始化// 声明并初始化 byte 类型变量 byte num1 10; // 先声明后初始化 byte num2; num2 -20;注意事项1.在使用byte类型时要注意类型提升问题在Java中进行运算时会进行类型提升如byte在运算时会先被自动提升为int类型如下代码会报错因为a和b都为byte类型在运算时进行了类型提升变为了byte类型给int类型赋值不符合自动类型转换原则需要进行强制类型转换byte a 10; byte b 20; byte c a b;//报错使用技巧1.想要获取byte的最大值和最小值可以使用Java提供的包装类Byte代码如下System.out.println(Byte.MAX_VALUE);//获取最大值 System.out.println(Byte.MIN_VALUE);//获取最小值2.short类型基本概念short类型用于表示整数它在内存中占用 2 个字节即 16 位的存储空间取值范围-32768到32767(计算方法与刚才一致// short型变量所能表示的范围 System.Out.println(Short.MIN_VALUE); System.Out.println(Short.MAX_VALUE);默认值在 Java 里如果定义一个short类型的成员变量但未进行显式初始化其默认值为 0。// 声明一个 short 类型的变量 short num1; // 初始化变量 num1 100; // 声明并同时初始化 short num2 200;运算与类型提升:在进行算术运算时short类型会自动提升为int类型。这意味着运算结果也是int类型若要把结果赋值给short类型的变量就需要进行显式的强制类型转换short a 10; short b 20; // 运算结果为 int 类型 int result a b; // 若要赋值给 short 类型需强制类型转换 short c (short) (a b);3.int类型基本概念 :int是 integer整数的缩写用于表示整数数值即没有小数部分的数。取值范围 :由于采用二进制补码来表示有符号整数int类型的取值范围是 -2147483648即 \(-2^{31}\)到 2147483647即 \(2^{31}-1\)。Integer.MIN_VALUE和Integer.MAX_VALUE来获取这个范围的边界值System.out.println(int 类型的最小值: Integer.MIN_VALUE); System.out.println(int 类型的最大值: Integer.MAX_VALUE);自动转换 :当把int类型的值赋给取值范围更大的数据类型如long、float、double时会发生自动类型转换。int intValue 10; long longValue intValue; float floatValue intValue; double doubleValue intValue;强制转换 :若要把取值范围更大的数据类型转换为int类型就需要进行强制类型转换。不过这种转换可能会导致数据丢失double doubleValue 12.34; // 强制转换为 int 类型小数部分会被截断 int intValue (int) doubleValue;应用场景 :在循环结构里经常用int类型的变量作为计数器for (int i 0; i 10; i) { System.out.println(i); }注意事项//在定义时没有给初始值但使用前必须设置初值 int b; b 10; System.Out.println(b); // 使用上面方法定义后在使用前如果没有赋值则编译期间会报错 int c; System.Out.println(c); c 100运算问题当两个int类型的数据进行相除时得到的数会自动取整int a 1; int b 2; int c a / b; //结果为0因为在java中两个整数相除会自动取整数 System.out.println(c);4.long类型字节大小long类型占用 8 个字节64 位的内存空间。取值范围其取值范围是 -9223372036854775808到 9223372036854775807。这使得long类型能够表示比int类型大得多的整数。默认值定义方式int a 10; long b 10; // long定义的长整型变量 long c 10L; // 为了区分int和long类型一般建议long类型变量的初始值之后加L或者l long d 10l; // 一般更加以加大写L因为小写l与1不好区分 // long型变量所能表示的范围这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用. System.Out.println(Long.MIN_VALUE); System.Out.println(Long.MAX_VALUE);面量后缀在给long类型的变量赋值时一定要加上L或l后缀否则如果赋值的字面量超出int类型的取值范围会导致编译错误long a 100; long b 100l; //报错 System.out.println(a); //没有报错 System.out.println(b);类型提升在进行算术运算时如果操作数中有long类型那么其他整数类型如byte、short、int会自动提升为long类型运算结果也为long类型int intValue 10; long longValue 100L; // int 类型的 intValue 会自动提升为 long 类型结果为 long 类型 long result intValue longValue;自动转换long类型可以自动转换为float和double类型因为这两种类型的取值范围更大long longValue 1234567890L; float floatValue longValue; double doubleValue longValue;二.浮点型1.float类型字节大小float类型占用 4 个字节32 位的内存空间。取值范围正数范围1.4 * 10 ^(-45)到3.4 * 10 ^38 负数范围-3.4 * 10^38 到-1.4* 10^(-45)。不过浮点数的表示并非精确值存在一定的精度限制精度于浮点数在计算机中是以二进制形式存储的对于一些十进制小数可能无法精确表示因此在进行浮点数比较和计算时要特别注意精度问题。例如不能直接使用来比较两个float类型的值是否相等而应该使用一个误差范围来判断float x 0.1f; float y 0.1f; // 不建议直接使用 比较默认值当float类型作为类的成员变量且未显式初始化时其默认值为0.0f。运算时的操作float类型支持常见的算术运算如加、减-、乘*、除/和取模%等。不过由于浮点数的精度问题在进行运算时可能会出现一些意外的结果后缀在给float类型的变量赋值时必须加上F或f后缀否则会被视为double类型导致编译错误。特殊值正无穷大负无穷大非数float a 1.0f / 0.0f; System.out.println(正无穷大: a); float b -1.0f / 0.0f; System.out.println(负无穷大: b); float c 0.0f / 0.0f; System.out.println(非数: c);精度问题由于浮点数在计算机中是以二进制形式存储的对于一些十进制小数可能无法精确表示因此在进行浮点数比较和计算时要特别注意精度问题。例如不能直接使用来比较两个float类型的值是否相等而应该使用一个误差范围来判断float x 0.1f; float y 0.1f; // 不建议直接使用 比较 // boolean isEqual x y; // 建议使用误差范围比较 float epsilon 0.000001f; boolean isEqual Math.abs(x - y) epsilon; System.out.println(x 和 y 是否相等: isEqual);2.double类型字节大小double类型占用 8 个字节64 位的内存空间取值范围正数范围4.9 * 10^(-324)到1.8 * 10^(308) 负数范围-1.8 * 10(308)到-4.9 * 10(-324)精度ouble类型具有大约 15 位十进制数的精度相较于float类型大约 6 - 7 位十进制数精度double能提供更高的精度来表示小数默认值当double类型作为类的成员变量且未显式初始化时其默认值为0.0精度问题和三个特殊的数字double和float时相同的三.字符型字节大小char类型占用 2 个字节16 位的内存空间。默认值由于采用 Unicode 编码char类型的取值范围是\u0000十进制的 0到\uffff十进制的 65535声明与初始化使用单引号直接赋值char ch1 A;使用 Unicode 编码赋值可以使用 Unicode 编码来表示字符格式为\uXXXX其中XXXX是 4 位十六进制数char ch2 \u0041;使用整数赋值由于char类型本质上是无符号的 16 位整数所以可以用 0 到 65535 之间的整数来赋值char ch3 65;字符运算加法运算采用字符串的拼接char ch A; int result ch 1; System.out.println(result);可以使用比较运算符如、、等比较两个char类型的值比较的是它们的 Unicode 码点char ch1 A; char ch2 B; boolean c ch2 ch1; System.out.println(c);字符转义序列Java 提供了一些特殊的字符转义序列用于表示一些无法直接输入的字符\t制表符\n换行符\r回车符\双引号\单引号\\反斜杠与字符串的关系字符拼接成字符串可以将char类型的变量与字符串进行拼接得到一个新的字符串char ch A; String str Hello, ch; System.out.println(str);从字符串中获取字符可以使用charAt()方法从字符串中获取指定位置的字符String str Hello; char ch str.charAt(0); System.out.println(ch);注意事项需要使用单引号而不是使用双引号// 错误使用双引号会编译报错 // char wrongCh A; // 正确 char correctCh A;四.布尔型1.boolean取值范围布尔型只有两个可能的值即true和false分别代表逻辑上的真和假。这两个值是 Java 中的关键字在代码里直接使用字节大小理论上布尔型只需 1 位来存储但在 Java 里布尔型变量通常占 1 个字节这是因为计算机内存的最小寻址单位是字节默认值若布尔型作为类的成员变量且未显式初始化其默认值为falsestatic boolean a; public static void main(String[] args) { System.out.println(a); }声明与初始化// 声明并初始化布尔型变量 boolean a true; boolean b false; // 先声明后初始化 boolean c; c true;布尔运算逻辑与当两个操作数都为true时结果才为true否则为falseboolean a true; boolean b false; boolean c a b; System.out.println(c);逻辑或||只要两个操作数中有一个为true结果就为true只有当两个操作数都为false时结果才为falseboolean a true; boolean b false; boolean c a || b; System.out.println(c);逻辑非!对单个布尔值取反若操作数为true结果为false若操作数为false结果为trueboolean a true; boolean c !a; System.out.println(c);短路特性逻辑与和逻辑或||具有短路特性。对于逻辑与若第一个操作数为false则不会再计算第二个操作数对于逻辑或若第一个操作数为true则不会再计算第二个操作数,上述代码的结果为5int x 5; boolean result (x 10) (x 20); System.out.println(x);应用场景条件判断布尔型变量常被用于if、else if、while、for等条件语句中以控制程序的执行流程boolean isAdult true; if (isAdult) { System.out.println(你是成年人。); } else { System.out.println(你是未成年人。); }循环控制在循环结构里布尔型表达式可作为循环的终止条件boolean isRunning true; while (isRunning) { // 执行循环体代码 // 满足某个条件时将 isRunning 设为 false 以终止循环 isRunning false; }注意事项不能与其他类型相互转换布尔型与其他基本数据类型如整数、浮点数、字符型等之间不能进行直接的类型转换例如不能将整数 0 或 1 直接赋值给布尔型变量也不能将布尔型变量转换为整数等其他类型五.需要的一些知识点讲解1.关于如何计算各种数据类型的范围此处以int类型为例子求int类型的范围原理bit比特它是计算机中最小的信息单位也被称为 “位”。一个 bit 只能表示两种状态通常用 0 或 1 来表示这对应着计算机二进制系统中的基本状态Byte字节字节是计算机中用于衡量数据量大小的常用基本单位。它由多个 bit 组成是信息存储和处理的基本单元在计算机中1个字节等于8比特也就是由8位0或1来表示而int类型由4个字节而一个字节又由8个bit位构成所以int类型一共占用了32位由最高位符号位和剩下的31位数值位构成符号位0表示正数而1表示负数计算最大值对于正数来说符号位位0(符号位0表示正数而1表示负数)剩下的都为1此时为正数最大值根据二进制转换为10进制的规则2^30 2^29 .... 2^1 2^0,此时根据等比数列的求和公式即可计算出范围2^31 - 1计算最小值对于负数符号位为1在二进制补码中(int的表示使用的是二进制补码) 符号位位1其余都为0进制补码表示的负数转换为十进制数的方法是先将补码减 1 得到反码再将反码各位取反得到原码最后根据原码计算十进制数值。符号位为 1其余 31 位全为 0 的补码减 1 后得到反码符号位不变其余 31 位全为 1再取反得到原码符号位为 1其余 31 位全为 0其对应的十进制数值为-2^312.java中的转换问题自动类型转换(隐式转换)概念自动类型转换也被叫做隐式转换Java 会在特定情形下自动完成类型转换。一般而言当把取值范围小的数据类型转换为取值范围大的数据类型时就会发生自动类型转换因为这样不会造成数据丢失转换规则自动类型转换发生在当范围小的数据类型向范围大的数据类型进行转换时此时不会发生精度的丢失几种基本数据类型的范围大小如下(byte-short-int-long-float-double)(char-int)(从小到大)// 1. byte 转 int byte byteVal 10; int intVal1 byteVal; System.out.println(byte 转 int: intVal1); // 2. char 转 int char charVal A; int intVal2 charVal; System.out.println(char 转 int: intVal2); // 3. int 转 long int intVal3 100; long longVal intVal3; System.out.println(int 转 long: longVal); // 4. long 转 float long longVal2 123456789L; float floatVal longVal2; System.out.println(long 转 float: floatVal); // 5. float 转 double float floatVal2 3.14f; double doubleVal floatVal2; System.out.println(float 转 double: doubleVal);强制类型转换(显式转换)概念强制类型转换也称作显式转换当需要把取值范围大的数据类型转换为取值范围小的数据类型时程序员必须手动进行转换。这种转换可能会造成数据丢失因为目标类型无法容纳源类型的所有值转换规则强制类型转换发生在范围大的向范围小的转换时但要谨慎使用因为可能会导致数据的丢失或者溢出// 1. double 转 int double doubleValue 3.14; int intValue (int) doubleValue; System.out.println(double 转 int: intValue); // 2. int 转 byte int intValue2 200; byte byteValue (byte) intValue2; System.out.println(int 转 byte: byteValue); // 3. long 转 short long longValue 32768L; short shortValue (short) longValue; System.out.println(long 转 short: shortValue);类型提升概念类型提升是指在表达式计算过程中不同数据类型的操作数会自动转换为一种兼容的类型从而确保运算能够顺利进行。类型提升是自动类型转换的一种具体表现规则主要发生在运算过程中(参与运算的操作数不同时)操作数类型不同时如果参与运算的操作数类型不同会将它们转换为其中取值范围最大的数据类型。常见的数据类型取值范围从小到大byteshortcharintlongfloatdouble有long参与只要运算中有long类型的操作数其他整数类型如byte、short、int都会自动提升为long类型运算结果也为long类型有float参与若运算中有float类型的操作数其他整数类型和long类型会自动提升为float类型运算结果为float类型有double参与当运算中有double类型的操作数时其他所有类型包括float都会自动提升为double类型运算结果为double类型
返回列表