java 数据类型

2021/01/10 Java基础知识 共 2370 字,约 7 分钟
闷骚的程序员

1. java 中的数据类型

java是种强类型高级开发语言,java中的每一个变量或者常量都必须明确指定对应的数据类型。
所谓数据类型,即表示对应的变量或者常量在内存中将按照什么方式进行存储、将占用多少内存空间等。

2. 数据类型将决定

  1. 数据类型将决定该变量或者该常量分配的内存空间大小(比如int就有固定的字节大小)。
  2. 数据类型将决定该变量或者该常量存储的内容是什么(数字?字符?还是引用地址?其实本质都是值)。
  3. 数据类型将决定该变量或者该常量以何种形式存储在内存中(线性结构?树形结构?表结构?即数据结构)。

3. 数据类型举例

  1. int类型有它决定的内存范围大小,所以其所能存储的最大整型数字和最小整型数字是有范围的,一旦最大值+1就会变成最小值,最小值-1就会变成最大值。
  2. int类型存储的内容是数字。
  3. int类型是以点性结构存储的,每个变量只能存储一个值,不能存储一堆值。

4. 八大基本数据类型和引用类型默认值

八大基本数据类型和其作为成员变量时的默认值:
1-4都属于数值类型

  1. byte:字节型(默认0,长度8bit,1byte);
  2. short:短整型(默认0,长度16bit,2byte);
  3. int:整型(默认0,长度32bit,4byte);
  4. long:长整型(默认0,长度64bit,8byte)。
  5. 字符类型:char(默认0,长度16bit,2byte)。
  6. 布尔类型:boolean(默认false,长度16bit,2byte)。
  7. 单精度浮点型:float(默认0.0,长度32bit,4byte)。
  8. 双精度浮点型:double(默认0.00,长度64bit,8byte)。

引用类型和其作为成员变量时的默认值:

  1. class(定义类),默认值是null值。
  2. enum(定义枚举) ,默认值是null值。
  3. 数组,默认值是null值。
  4. interface(接口) ,默认值是null值。

5. 八大基本数据类型的类型转换

5.1 类型转换前提

类型转换针对的对象只针对8大基本数据类型,而且这8种类型中相互转换的类型间必须具有兼容性。
比如boolean不能转换成int的,因为本身类型就不兼容)byte、short、int、long、char、float、double类型可以互相转换(都是数字)。
对于引用类型的转换,牵扯到父子类之间的向上转型和向下转型(即多态性)。
要想调用子类自己的方法和成员,必须向下转型,向下转型前必须先向上转型,但是如果没有向上转型,向下转型也可以转型,编译不报错,只不过运行会报类转换异常。
有个特例:对于String类型,任何类型和String类型通过连接符号“+”进行连接后都转换成String类型。

5.2 类型转换原则

口诀: 从小到大,自动强制都可以(自动类型转换和强制类型转换)。 从大到小,只能用强制(强制类型转换)。
  1. 自动类型转换:两种类型的操作数遇到操作符则结果自动转换;
  2. 强制类型转换:必须在目标操作数前面指定(类型)才能将目标操作数转换成想要的类型。
    举例:
    char a = 'a';
    int b = 97;
    System.out.println(a == b);
    int c = a;//自动类型转换
    System.out.println(c);
    char d = (char) c;//强制类型转换
    System.out.println(d);
    System.out.println("\"HelloWorld\"\n\"我叫赵二虎\"" + "d:");
    

6. void是啥?

上面所说的8大基本数据类型,是明确的。
实际上,上面的8大基本数据类型,byte、short、int、long、char、boolean、float、double,java虚拟机都为它们创建了对应的class对象。
就像你定义了一个引用类Person,Person被JVN装载后就会在对应的堆内存中创建一个唯一的class对象用来描述Person类的结构。
int等基本类型由于是JVM内置的类型,JVM默认会为这些类型创建对应的class对象。
确切来讲,java中共有9中预定义的Class对象。之所以预定义是因为这9种Class对象是由java虚拟机默认创建好的。
这9种预定义的Class对象分别是8大基本类型和void,其对象名称分别与其表示的基本类型相同,即 byte、short、int、long、char、boolean、float、double和void。
这9种class对象只能通过public static final 声明的变量进行访问,即:
int.class,short.class,void.class等。其他方式无法访问。
扩展:
Class类中有一个isPrimitive()方法,用来判断传入的class对象是否是一个基本类型,如果是则返回true,否则返回false。
而能使此方法返回true,仅有的9个class对象便是上面提到的9种。如果是基本类型的包装类型,上述方法将返回false。
案例:

package zeh.test.demo.com;

public class Test {
    public static void main(String args[]) {
        System.out.println(void.class.isPrimitive());
        System.out.println(int.class.isPrimitive());
        System.out.println(float.class.isPrimitive());
        System.out.println(boolean.class.isPrimitive());
        System.out.println(Integer.class.isPrimitive());
    }
}

执行结果:

true
true
true
true
false
Process finished with exit code 0

文档信息

Search

    Table of Contents