Java学习笔记003:primitive type小结

十年以前,在大学校校园里,学习Java的时候,遇到讲基本数据类型的章节,因自己缺乏足够的耐心,进而觉得麻烦,啰嗦,而直接选择略过,自然自己所学的那一丁点儿关于Java的编程知识,随着考试的结束而结束了。

现如今,开始动手看《Thinking in Java》这本书时,同样会遇到讲解数据类型的章节,同样的知识点儿,同样的知识内容,遇到同样的读者,只不过这次有了不一样心态的读者。相较过去而言,即使我有了足够的耐心和不一样的心态,也没有能够一次性搞定这些数据类型。在反复翻看了这一章节的书本内容之后,加上从互联网上看到这篇关于讲解Java变量和数据类型文字,以及看到这个关于primitive type的小结图,瞬间觉得对基本数据类型了解和掌握的通透。

小结:

  1. 知识早晚是要学的,十年前欠下的债现在还,要还抓紧还,现在还也不晚,还干净,还彻底;
  2. 对于学习新知识要有足够足够的耐心,反复打磨,刻意练习;
  3. 同一个知识点,有时候需要从多个角度、维度去学习;
  4. 基本数据类型分为布尔类型、字符类型、数字类型。其中数字类型又分为整型数字和浮点数;

 

Java学习笔记002:primitive type效率高

问题:在Java中,为什么使用primitive type的效率要比通过new来创建数据类型的效率高?

首先,在Java中,primitive type从字面上可以理解为基本数据类型,或者原始数据类型。它是char、byte、short、int、long、double、float、Boolean的统称。

其次,在Java中,存放数据的地方有下面5个地方。

  1. register,寄存器。即,位于CPU芯片上的寄存器,其特点是速度特别快,但是不能直接操作;
  2. stack,内存栈区。位于Random Access Memory上,即内存中。运行速度次于register,可直接操作;
  3. heap,内存堆。同样位于内存区。其特点是,所有通过new关键字来创建出来的对象都位于该内存堆区;
  4. Read Only Memory,只读存取器。通常用于存放常量或者静态的不变的数据;
  5. non-RAM,非内存存储。说白了,就是把那些可以独立于程序存放的数据,不放在上面任何一个地方存储。而是存放在诸如磁盘或光盘上。类似于Oracle数据库的外部表的数据不存放在数据库里,而是存放在数据库之外的存储上一样。

这里,有一个重点是,在Java中,所有通过new来创建的对象,都会存放在内存的heap区中。另外,从1-5的存储区,其运行速度是逐步降低的。因此,当我们使用new去创建对象/变量时,其运行速度肯定不如内存的stack区效率高。

所以,Java也沿袭了C/C++的做法,提供了一些原始数据类型,并且把这些类型的变量放到内存的stack区来处理。当我们需要使用这些类型的变量时,直接拿过来用即可,而不再需要通过new关键字来新建1个出来。如下,整型变量n1要比n2快:

 
public class PrimitiveType {
	public static void main(String[] args) {
		int n1 = 47;
		Integer n2 = new Integer(47);
		System.out.println("Fast:n1" + n1);
		System.out.println("Slow:n2" + n2);
	}
}

 

小结:Java中提供的原始数据类型,都是在内存的stack区处理。通过new来创建的变量是在内存的heap区进行处理。 前者执行效率要比通过new在内存heap区创建变量的执行效率高。

Java学习笔记001:Java中的变量

在Java程序中,变量既可以是基本数据类型的某个值,也可以是指向某个对象的引用。

后半句,是我自己前段时间在学习Java的过程中,不曾理解到位的内容。这个跟面向过程的编程语言C,有很大的区别。是自己被C语言的思维模式固化了,因为在自己的脑子里,直观的反应就是类似于这样的变量:

 
int n1=10;
char c1='C';

接触Java,脑子里就得有后半句关于变量的概念。

一段关于Java的源代码如下:

 
public class JavaVariables{
	public static void main(String[] args){
		int n1=10;
		String s1="Hello,Java.";
		System.out.println(n1);
		System.out.println(s1);
	}
}

编译运行,如下:

 
$ javac JavaVariables.java 
$ java JavaVariables
10
Hello,Java.
$