
作者简介:一名大一在校生
个人主页:月亮嚼成星~
个人WeChat:yx1552029968
系列专栏:JavaSE基础
每日一句:如果你要做一件事,不要到处宣言自己的想法,只管安安静静地去做,值不值,时间是最好的证明,自己的人生,得自己负责。
目录

注意:不管几位的操作系统Java中基本数据类型内存占用情况都是如上表所示!并且整型和浮点型都是有符号的。
- public class Test {
- //使用变量没有赋初值
- public static void main(String[] args) {
- int a;
- System.out.println(a);
- }
- }

- public class Test {
-
-
- public static void main(String[] args) {
- //表示int类型的范围
- System.out.println(Integer.MIN_VALUE);
- System.out.println(Integer.MAX_VALUE);
- int a=2147483648;
- }
- // //使用变量没有赋初值
- // public static void main1(String[] args) {
- // int a;
- // System.out.println(a);
- // }
- }
出现超过范围系统会直接报错,如果是以表达式的形式需要运行才能显示错误,如:
- public class Test {
-
-
- public static void main(String[] args) {
- System.out.println(2147483647+1);
- }
-
-
-
- // public static void main2(String[] args) {
- // //表示int类型的范围
- // System.out.println(Integer.MIN_VALUE);
- // System.out.println(Integer.MAX_VALUE);
- // int a=2147483648;
- // }
- // //使用变量没有赋初值
- // public static void main1(String[] args) {
- // int a;
- // System.out.println(a);
- // }
- }

- public class Test {
- public static void main(String[] args) {
- int a=1;
- int b=2;
- int c=a/b;
- System.out.println(c);
- }
-
-
- }

按我们一般的看法来说,结果应该是0.5,这里的结果却是0,原因是:在 Java中, int除以int 的值仍然是 int(会直接舍弃小数部分)。如果想得到 0.5, 需要使用 double 类型计算.
- public class Test {
- public static void main(String[] args) {
- int a=1;
- int b=2;
- double c=1.0/b;
- System.out.println(c);
- }
-
-
- }

我们再来看一个:
- public class Test {
- public static void main(String[] args) {
- double a=1.1;
- System.out.println(a*a);
- }
-
- }
一般我们会认为它的结果是1.21,但是结果呢?

原因是:double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
- public class Test {
-
- public static void main(String[] args) {
- boolean a=true;
- System.out.println(a);
- boolean b=1;//可行吗?
- }
-
-
- }

这里报错了,原因是:boolean 类型的变量只有两种取值, true 表示真, false 表示假。
Java的boolean类型和 int不能相互转换, 不存在1表示 true, 0表示false这样的用法.
- public class Test {
-
- public static void main(String[] args) {
- int a=100;
- long b=500L;
- b=a;//可行?
- a=b;//可行?
- }
-
-
- }

为什么报错:原因在于Java的自动类型转换(隐式):代码不需要经过任何处理,在代码编译时,编译会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。所以int可以自动转换为long,反过来就不行。
再看一个:
- public class Test {
-
- public static void main(String[] args) {
- byte a=10;
- byte b=20;
- byte c=a+b;
- System.out.println(c);
- }
-
- }

为什么会报错?可能有人会问这同种数据类型运算也会报错??
原因:byte和byte都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和b都提升成int, 再进行计算, 得到的结果也是int, 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如byte 和short这种低于 4 个字节的类型, 会先提升成 int, 再参与计算。
- public class Test {
-
- public static void main(String[] args) {
- String a="hello";
- String b="world";
- System.out.println(a);
- System.out.println(b);
- System.out.println((a + b));
-
- }
-
- }
🐳 4.字符串转换在有些情况下,需要将字符串和整形数字之间进行转换:
- public class Test {
-
- public static void main(String[] args) {
- int num=10;
- //方法一
- String sr=num+"";
- //方法二
- String st=String.valueOf(num);
- System.out.println(sr);
- System.out.println(st);
-
- }
-
- }

- public class Test {
-
- public static void main(String[] args) {
- String str = "10000";
- //方法一
- int num = Integer.parseInt(str);
- //方法二
- int number=Integer.valueOf(str);
- System.out.println(num);
- System.out.println(number);
- }
-
- }

推荐使用第一种。
多谢兄弟们
码字不易,求个三连。
