【Java SE】数据类型常见错误及字符串拼接与转换

简介: 【Java SE】数据类型常见错误及字符串拼接与转换

🐳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. }

推荐使用第一种。

相关文章
|
21天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
95 60
|
11天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
33 6
|
12天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
37 4
|
10天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
24 1
|
1月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
46 15
|
25天前
|
存储 Java 关系型数据库
[Java]“不同族”基本数据类型间只能“强转”吗?
本文探讨了不同位二进制表示范围的计算方法,重点分析了Java中int和char类型之间的转换规则,以及float与int类型之间的转换特性。通过具体示例说明了显式和隐式转换的条件和限制。
33 0
[Java]“不同族”基本数据类型间只能“强转”吗?
|
24天前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
18 0
|
1月前
|
Java 编译器 C++
【编程基础知识】Java基本数据类型
Java的基本类型包括五类九种,涵盖了整型、浮点型、字符型、布尔型和void。成员变量即使未初始化也有默认值,但局部变量必须显式初始化,否则编译会报错。示例代码展示了各种基本类型的默认值和极限值。
34 0
|
11天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
7天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
27 9