这是Thinging in Java学习笔记的第二篇,主要是关于基本类型的。
不足之处,欢迎斧正。
不少人(包括我自己)学到了变量之后会很奇怪Java不是面向对象语言吗,为什么有int这种极具C语言(面向过程语言)气息的变量?
既然有int那就直接用int就好了嘛,为什么还要装箱(Boxing)和拆箱(Unboxing)?
int -> 面对对象?
前一篇博客中提到了面向对象语言的一个特性 “Everything is an Object.”
从前文也可以推断出这个特性并不是绝对的,在everything之外也是有特例的,这个特例就是基本类型(Primitive Types)。
在程序设计中经常会使用到一系列类型,它们需要被特殊对待,我们可以把它们想象成“基本”(primitive)类型。之所以特殊对待,是因为new将对象存储在“堆”里,故用new创建一个对象——特别是小的、简单的变量,往往不是很有效。
这么高深的话像我等俗人是理解不来的,所以我把它翻译了一下就是我如果用个简简单单的int还要去创造一个类,去new出来,然后再去赋值太麻烦了,人累、编译器也累。
当然这个原因并不能支持一门纯粹的面向对象语言去保留面向过程语言的特性,我觉得它还有其他的原因。在解释这些原因之前我们需要先了解一下这些类型所占用的内存空间大小。
Primitive Type | Memory Required(bytes) | Wrapper Type |
---|---|---|
boolean | 1 | Boolean |
byte | 1 | Byte |
short | 2 | Short |
char | 2 | Character |
int | 4 | Integer |
float | 4 | Float |
long | 8 | Long |
double | 8 | Double |
Reference类型在32位系统上每个占用4bytes, 在64位系统上每个占用8bytes。
因为Java的Object将基本的数据都包装了一遍,导致我们在使用这些包装类的时候占用了更多的内存以及使用其中的数据的时候占用了更多的时间。
下面是关于时间的测试代码:
public class Main {
public static void main(String[] args