Java Primitive/Container Type

Java 全局变量不一定初始化(即只声明就可以了) 但是局部变量一定要初始化
Java的基础类型变量不需要手动初始化。对于固定长度的容器(比如说Array)来说: 引用类型变量要么初始化其大小,要么初始化其内部元素。而不固定长度的容器(比如说ArrayList):(?)

关于int和Integer的区别以及其初始化:

  • int和Integer是两种不同的数据类型
  • int是基本类型, 但是Integer是对象,是一个引用类型,是一个int的封装类,是int的拓展,定义了很多int的操作方法(就像Array和Arrays)。
  • int在声明时会自动被初始化为0, 而Integer则被初始化为null(所有的引用变量都是这样)
  • 手动初始化:int i = 1; Integer i = new Integer(1); Integer i = 1;(也是可以的 因为有自动装箱和拆箱)
  • 当需要往容器中放东西的时候 只能直接放入Integer, 因为容器只能装Object。要装基本类型的话只能转换以下。而且你在定义泛型的时候 也不支持int, 即List<Integer> list = new ArrayList<Integer>(); 而不是List<Integer> list = new ArrayList<int>();
  • int与Integer如何互相转换? int n = 1; Integer n1 = new Integer(n);

那么什么是容器呢?
在这里插入图片描述
上图中 画点虚线框的是接口, 线虚线框的是抽象类,画实线框的是实体类,画粗线框的是常用的。其他的箭头是继承和实现。

基础数据类型和这些容器类之间还隔着:

  • 基础数据类型对应的包装类:Integer, Double, Float, Character, Short.
  • Array类
  • String类 以及其拓展 StringBuilder, StringBuffer(注意 纯array类和String类的长度都是不能变的 String更甚 甚至元素也不能变,所以如果调用String类的相关方法修改String,其实返回路一个新的String 原String变量不变)

容器类里面盛放的元数据都是对象 都是引用类型。

关于String类多说几句:
由于使用非常频繁 因此java的设计者决定在面向对象的语言中保留基本类型 而不是把所有东西都变成对象,从而提高语言性能。因为基本类型储存在调用堆栈种,占用空间少。而对象储存在程序堆中,需要更多的储存空间。处于性能原因,String被设计成了介于基本类型和引用类之间。其表现在可以使用’+‘操作符,而且String有两种初始化方式:String s1 = “Hello”; (基本类型的初始化方式)String s1 = new String(“Hello”);(引用类型的构造器初始化方式)//但是好像Integer其他的也可以的吧。

posted @ 2020-04-26 22:46  EvanMeetTheWorld  阅读(29)  评论(0)    收藏  举报