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

推荐使用第一种。

相关文章
|
15天前
|
Java 开发者 UED
Java 输入处理的常见错误
本文深入探讨了Java中输入处理的常见错误与认知偏差,重点分析了`Scanner`类的使用误区。例如,`nextInt()`后紧跟`nextLine()`会因残留换行符导致输入跳过,需额外调用`nextLine()`清理缓冲区;`nextLine()`始终返回字符串,需手动转换数据类型;处理多数字输入时,应结合`split()`与`Integer.parseInt()`方法。通过剖析这些问题,帮助开发者理解`Scanner`的工作机制,提升输入处理代码的健壮性与准确性。
29 3
|
27天前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
38 12
|
1月前
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
74 17
|
1月前
|
存储 缓存 安全
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
55 13
|
15天前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
47 0
|
1月前
|
Java
课时12:Java数据类型划分(字符型)
课时12介绍了Java中的字符型数据(char),包括字符的定义、与int类型的转换及应用。通过范例展示了如何观察字符、编码转换、大小写字母互转、保存中文字符,以及Java中字符处理的灵活性。字符型使用单引号声明,可与int互相转换,支持Unicode编码,能表示任何文字,包括中文。虽然实际开发中直接操作字符型的情况不多,但理解其特性有助于更好地编程。
64 17
|
1月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
73 15
|
1月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
|
1月前
|
Java
课时13:Java数据类型划分(布尔型)
观察布尔型的操作。布尔是一位数学家的名字,这个布尔发明了两个单词:True、False(一个表示真一个表示假)。一般布尔类型都只表示逻辑的计算结果。
|
1月前
|
Java
课时11:Java数据类型划分(浮点类型)
课时11介绍了Java中的浮点数据类型。主要内容包括:1. 定义小数,默认使用Double类型;2. 定义Float变量,需在数值后加"F"或"f"进行强制转换;3. 观察不同类型计算结果,如Int型除法会丢失精度,需至少包含一个Double或Float类型以确保准确性。总结指出,在复杂计算中推荐使用Double类型以避免精度损失。
下一篇
oss创建bucket