🐳1.基本数据类型一览表:
注意:不管几位的操作系统Java中基本数据类型内存占用情况都是如上表所示!并且整型和浮点型都是有符号的。
🐳2.数据类型常见错误:
🐬2.1使用变量没有赋初值
1. public class Test { 2. //使用变量没有赋初值 3. public static void main(String[] args) { 4. int a; 5. System.out.println(a); 6. } 7. }
🐬 2.2变量超出表示范围
1. public class Test { 2. 3. 4. public static void main(String[] args) { 5. //表示int类型的范围 6. System.out.println(Integer.MIN_VALUE); 7. System.out.println(Integer.MAX_VALUE); 8. int a=2147483648; 9. } 10. // //使用变量没有赋初值 11. // public static void main1(String[] args) { 12. // int a; 13. // System.out.println(a); 14. // } 15. }
出现超过范围系统会直接报错,如果是以表达式的形式需要运行才能显示错误,如:
1. public class Test { 2. 3. 4. public static void main(String[] args) { 5. System.out.println(2147483647+1); 6. } 7. 8. 9. 10. // public static void main2(String[] args) { 11. // //表示int类型的范围 12. // System.out.println(Integer.MIN_VALUE); 13. // System.out.println(Integer.MAX_VALUE); 14. // int a=2147483648; 15. // } 16. // //使用变量没有赋初值 17. // public static void main1(String[] args) { 18. // int a; 19. // System.out.println(a); 20. // } 21. }
🐬 2.3精度舍弃错误
1. public class Test { 2. public static void main(String[] args) { 3. int a=1; 4. int b=2; 5. int c=a/b; 6. System.out.println(c); 7. } 8. 9. 10. }
按我们一般的看法来说,结果应该是0.5,这里的结果却是0,原因是:在 Java中, int除以int 的值仍然是 int(会直接舍弃小数部分)。如果想得到 0.5, 需要使用 double 类型计算.
1. public class Test { 2. public static void main(String[] args) { 3. int a=1; 4. int b=2; 5. double c=1.0/b; 6. System.out.println(c); 7. } 8. 9. 10. }
我们再来看一个:
1. public class Test { 2. public static void main(String[] args) { 3. double a=1.1; 4. System.out.println(a*a); 5. } 6. 7. }
一般我们会认为它的结果是1.21,但是结果呢?
原因是:double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
🐬2.4boolean类型理解错误
1. public class Test { 2. 3. public static void main(String[] args) { 4. boolean a=true; 5. System.out.println(a); 6. boolean b=1;//可行吗? 7. } 8. 9. 10. }
这里报错了,原因是:boolean 类型的变量只有两种取值, true 表示真, false 表示假。
Java的boolean类型和 int不能相互转换, 不存在1表示 true, 0表示false这样的用法.
🐬2.5数据类型转换错误
1. public class Test { 2. 3. public static void main(String[] args) { 4. int a=100; 5. long b=500L; 6. b=a;//可行? 7. a=b;//可行? 8. } 9. 10. 11. }
为什么报错:原因在于Java的自动类型转换(隐式):代码不需要经过任何处理,在代码编译时,编译会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。所以int可以自动转换为long,反过来就不行。
再看一个:
1. public class Test { 2. 3. public static void main(String[] args) { 4. byte a=10; 5. byte b=20; 6. byte c=a+b; 7. System.out.println(c); 8. } 9. 10. }
为什么会报错?可能有人会问这同种数据类型运算也会报错??
原因:byte和byte都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和b都提升成int, 再进行计算, 得到的结果也是int, 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如byte 和short这种低于 4 个字节的类型, 会先提升成 int, 再参与计算。
🐳3.字符串拼接
1. public class Test { 2. 3. public static void main(String[] args) { 4. String a="hello"; 5. String b="world"; 6. System.out.println(a); 7. System.out.println(b); 8. System.out.println((a + b)); 9. 10. } 11. 12. }
🐳 4.字符串转换
在有些情况下,需要将字符串和整形数字之间进行转换:
🐬4.1 int转换为String
1. public class Test { 2. 3. public static void main(String[] args) { 4. int num=10; 5. //方法一 6. String sr=num+""; 7. //方法二 8. String st=String.valueOf(num); 9. System.out.println(sr); 10. System.out.println(st); 11. 12. } 13. 14. }
🐬4.2 String转换为int
1. public class Test { 2. 3. public static void main(String[] args) { 4. String str = "10000"; 5. //方法一 6. int num = Integer.parseInt(str); 7. //方法二 8. int number=Integer.valueOf(str); 9. System.out.println(num); 10. System.out.println(number); 11. } 12. 13. }
推荐使用第一种。