总结归纳Java基础知识点之数据类型

2021-08-10 15:15:46 浏览数 (2537)

一、基本数据类型

1.1 整形

1.1.1 int

int a = Integer.MAX_VALUE;//int最大值
int b = Integer.MIN_VALUE;//int最小值

在java中int占4个字节,和操作系统每任何关系。这也是java的可移植性。

int 能表示的范围为-231~231-1,如果超出最大值或者小于最小值则会发生溢出。

public static void main(String[] args) {
            int a = Integer.MAX_VALUE;//int最大值
            int b = Integer.MIN_VALUE;//int最小值
            System.out.println("MAX_VALUE="+a);
            System.out.println("MIN_VALUE="+b);
            a = a+1;
            b = b-1;
            System.out.println("---------------");
            System.out.println("MAX_VALUE+1="+a);
            System.out.println("MIN_VALUE-1="+b);
}

202104230854132

我们发现int的最大值加1会等于int的最小值,而int的最小值减1会等于int的最大值。这种情况不仅在int,在long和short都存在

202104230854133

1.1.2 长整形:long

long占8个字节,可表示的范围是 -263~-263-1

long a = 100L;
long b = 100l;
long c = 100;

在创建长整形变量时,a,b,c三种都可以,当我们一般用第一种,大写L更好识别它时长整形

1.1.3 短整形:short

short占2个字节,所能表示的范围为-215~215-1
short能表示的范围 -32768~32767 ,所表示的范围比较小一般不推荐使用,所以我们以后 int 和 long 时使用的比较多的。

1.2 浮点型

1.2.1 双精度浮点型:double

public static void main(String[] args) {
            int a1 = 1;
            int a2 = 2;
            double b1 = 1.0;
            double b2 = 2.0;
            System.out.println("a1/a2="+a1/a2);
            System.out.println("b1/b2="+b1/b2);
}

在这里插入图片描述

在java当中int除以 int 只能得到 int 类型,因为小数部分会被舍去。如果要得到小数则需要用浮点数来计算。

再来看一个有意思的代码

public static void main(String[] args) {
            double a = 1.1;
            System.out.println(a*a);

}

202104230854145

这里a*a理论上说时等于1.21的但这里为什么不是呢?

1.Java 中的 double 虽然也是 8 个字节, 但是浮点数的内存布局和整数差别很大, 不能单纯的用 2n 的形式表示数据范

2.Java 的 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势
必会存在一定的精度误差围,而且计算机中小数是没有精确的数字的

1.2.2 单精度浮点型:float

flaot占4个字节

public static void main(String[] args) {
            float a1 = 1.1;
            float a2 = (float)1.1;
            float b = 1.1F;
            float c = 1.1f;
}    

202104230854146

这里为什么报错呢?因为Java是一个强类型语言,安全性更高。在Java当中小数默认是double类型的,在创建float变量的时候,需要在小数后面加上一个F(f)或者强制类型转换。

不过float能表示的精度较小,所以我们一般都是用double

1.3 字符类型变量char

在java中char不同于C语言它是占两个字节的,计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.

public static void main(String[] args) {
            char a = 97;
            char b = 65;
            char c = '好';
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
}       

202104230854147

在Java当中字符类型就是字符类型不要和数字挂钩,记住java中字符类型是不能够给负数的。

在这里插入图片描述

1.4 字节类型变量byte

byte占1个字节,能表示的范围为 -128~127
byte不能赋值超过它范围外的数字,从而可以推到出其它类型也是一样的。

来看一段代码:

202104230854149

这里的 b3和b5都报错,而b4没有报错呢?

1.这是因为执行 b3 这段代码时,b1和b2都是变量编译器不知道里面是什么,为了安全起见所以报错。

2.而b4不报错时因为在编译的时候 5+10就已经被替换为15了,相当于 b4 = 15.

3.那b5报错又是为什么呢?这里就牵扯到了整形提升,

简单说一下整形提升:当变量小于4个字节的时候,比如这里的byte在计算时会把它先提升为整形int再进行计算。而byte是1个字节接收不了int类型的变量,所以报错。后面会再提到整形提升

1.5 布尔类型变量 boolean

boolean a = false;
boolean b = true;

1.在java中布尔类型只有两个取值 falsetrue

2.java中的boolean和int 类型不能相互转换,不存在1表示true ,0表示false这种用法

3.boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位。并没有明确规定大小

1.6 字符串类型变量 String

Java的字符串可以用+进行拼接

public static void main(String[] args) {
            String str1 = "这是一个字符串";
            String str2 = "java";
            String tmp = str1 + str2;
            System.out.println(tmp);
}

2021042308541410

同样也可以拼接数字

public static void main(String[] args) {
            String str1 = "这是一个字符串";
            String str2 = "java";
            String tmp = str1 + str2;
            System.out.println(tmp);
            int a = 10;
            int b = 20;
            System.out.println(tmp+a+b);
            System.out.println(a+b+tmp);
}

2021042308541411

输出的时候如果前面是字符串则后面的数字会被当作字符进行拼接,可以根据自己的需要进行运算或者拼接

1.Java 使用 双引号 + 若干字符 的方式表示字符串字面值.

2. 和上面的类型不同, String 不是基本类型, 而是引用类型(在以后的文章会说到).

二、常量

上面讨论的都是各种规则的变量, 每种类型的变量也对应着一种相同类型的常量.

常量指的是运行时类型不能发生改变.

常量主要有以下两种体现形式

2.1 字面常量

2021042308541412

2.2 … final 关键字修饰的常量

在这里插入图片描述

final修饰的常量是不能被直接修改的

三、 类型转换和数值转换

3.1 类型转换

java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验.来看一下列子

2021042308541414

long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.

double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.

结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.

3.1.1 强制类型转换

2021042308541415

结论: 使用 (类型) 的方式可以将 double 类型强制转成 int. 但是

1.强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 20.5 就变成 20 了, 小数点后面的部分被忽略.

2.强制类型转换不是一定能成功, 互不相干的类型之间无法强转

在这里插入图片描述

比如这个列子 int 和 boolean这两种完全不相关的类型是不可以强转的。

类型转换小结:

1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.

3.2 数值提升

2021042308541415

结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来
接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

再来看一个例子,前面在byte类型的时候就已经说到了,这里再详细说一下。

2021042308541517

结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这时赋给 c, 就会出现上述错误。

由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算。
简单来说类型提升就是为了加快cpu运算速度

如果非要这样计算,则需要强转。

类型提升小结:

1.不同类型的数据混合运算, 范围小的会提升成范围大的.

2.对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

四、 int 和 String 之间的相互转换

4.1 int转String

public static void main(String[] args) {
            int a = 10;
            //方法1
            String str1 = 10+" ";
            //方法2
            String str2 = String.valueOf(a);
}

4.2 String转int

public static void main(String[] args) {
            String str = "123456";
            int b = Integer.valueOf(str);
            int c = Integer.parseInt(str);
}

五、总结

2021042308541519

内置数据类型共有8种,每一个内置类型都会对应一个包装类,这里也不深入讲解。简单来说就是方便了数据的处理
感谢阅读!

关于Java基础知识的数据类型内容到这里就已经结束了,想要对Java基础知识有更多的了解,可以搜索W3Cschool以前的文章或继续浏览下面的相关文章。希望本篇文章能给大家一个帮助,同时也希望大家能够多多支持!