Java的Object类
在Java中,Object
类是所有类的根类,也就是说,所有类都直接或间接继承自Object
类。因此,Object
类型可以表示任何类型的对象。以下是一些常见的Object
类型实例,以及它们如何被存储和使用:
一、基本数据类型对应的包装类
Java中的基本数据类型(如int
、float
、double
等)都有对应的包装类,这些包装类继承自Object
。例如:
-
Integer
(对应int
) -
Float
(对应float
) -
Double
(对应double
) -
Boolean
(对应boolean
) -
Character
(对应char
) -
Byte
(对应byte
) -
Short
(对应short
) -
Long
(对应long
)
这些包装类使得基本数据类型可以被当作对象处理,从而可以存储在集合中。例如:
List<Object> list = new ArrayList<>();
list.add(Integer.valueOf(123)); // 添加一个Integer对象
list.add(Double.valueOf(45.67)); // 添加一个Double对象
list.add(Boolean.TRUE); // 添加一个Boolean对象
二、自定义类
你可以定义自己的类,这些类也继承自Object
。例如:
class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}// 省略getter和setter方法
}List<Object> list = new ArrayList<>();
list.add(new Person("Alice", 30)); // 添加一个Person对象
三、字符串
String
类也是Object
的子类,因此字符串也可以被存储在Object
类型的集合中。例如:
List<Object> list = new ArrayList<>();
list.add("Hello, World!"); // 添加一个String对象
四、数组
数组也是Object
的子类,无论是基本数据类型的数组还是对象数组,都可以被存储在Object
类型的集合中。例如:
List<Object> list = new ArrayList<>();
list.add(new int[]{1, 2, 3}); // 添加一个int数组
list.add(new String[]{"a", "b", "c"}); // 添加一个String数组
五、枚举
枚举类型也是Object
的子类。例如:
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}List<Object> list = new ArrayList<>();
list.add(Day.MONDAY); // 添加一个枚举对象
六、其他对象
除了上述常见的类型,任何其他自定义类或库中的类的实例也可以被存储在Object
类型的集合中。例如:
List<Object> list = new ArrayList<>();
list.add(new Date()); // 添加一个Date对象
list.add(new ArrayList<>()); // 添加一个ArrayList对象
list.add(new HashMap<>()); // 添加一个HashMap对象
七、null
值
null
值也可以被存储在Object
类型的集合中,它表示没有对象的引用。例如:
List<Object> list = new ArrayList<>();
list.add(null); // 添加一个null值
八、总结
Object
类型可以表示任何类型的对象,这使得它非常灵活,但也带来了类型安全和代码可读性的问题。在实际开发中,尽量使用具体的类型来代替Object
,以提高代码的类型安全性和可读性。只有在确实需要存储不同类型的数据时,才考虑使用Object
类型。
在Java中,非Object
类型主要包括基本数据类型(primitive types)和原始类型。这些类型不是类的实例,也不继承自Object
类。以下是一些常见的非Object
类型及其示例:
一、基本数据类型(Primitive Types)
Java提供了8种基本数据类型,这些类型不是类,而是直接存储数值。它们包括:
-
int
(整数类型)-
32位有符号整数。
-
示例
int age = 25;
-
-
long
(长整数类型)-
64位有符号整数。
-
示例
long bigNumber = 1234567890123456789L;
-
-
short
(短整数类型)-
16位有符号整数。
-
示例
short smallNumber = 123;
-
-
byte
(字节类型)-
8位有符号整数。
-
示例
byte tinyNumber = 10;
-
-
float
(单精度浮点数)-
32位浮点数。
-
示例
float price = 19.99f;
-
-
double
(双精度浮点数)-
64位浮点数。
-
示例
double pi = 3.14159;
-
-
char
(字符类型)-
16位无符号Unicode字符。
-
示例
char letter = 'A';
-
-
boolean
(布尔类型)-
只有两个值:
true
和false
。 -
示例
boolean isTrue = true;
-
二、基本数据类型与包装类的对比
基本数据类型和它们对应的包装类(如Integer
、Double
等)有以下主要区别:
表格
复制
特性 | 基本数据类型 | 包装类 |
---|---|---|
类型 | 基本数据类型 | 对象 |
存储方式 | 直接存储数值 | 存储对象引用 |
默认值 | 0 (int )、false (boolean )等 | null |
内存占用 | 较小 | 较大(对象开销) |
空值支持 | 不支持 | 支持(可以为null ) |
操作性能 | 高 | 低(涉及对象创建和引用) |
三、总结
基本数据类型(int
、double
、char
等)是Java中的非Object
类型,它们直接存储数值,不继承自Object
类。这些类型在需要高性能和内存效率的场景中非常有用。相比之下,包装类(如Integer
、Double
等)是对象,继承自Object
类,支持空值和对象操作,但性能和内存占用相对较高。在实际开发中,根据具体需求选择合适的类型。