Java memo-1

1.java中int和Integer的区别
int是基础类型,Integer是Object类型,Integer是int的包装类,继承于Object类

List<Integer> list = new ArrayList<Integer>();
list.add(1);   //把一个整数加入到集合中
int i = list.get(0);    //从集合中取出元素

其中list.add(1)其实有一个自动装箱(AutoBoxing)的过程,输入是int,接受是Integer,就会调用静态的valueOf方法,即list.add(Integer.valueOf(1));
list.get(0)有一个拆箱(UnBoxing)过程,调用的是intValue方法,即int i = list.get(0).intValue();,取出Integer被包装的int值。
参考链接:Java暗箱操作之自动装箱与拆箱

2.向上转型和向下转型
把一个子类类型安全地变为父类类型的赋值,被称为向上转型(upcasting),向上转型实际上是把一个子类型安全地变为更加抽象的父类型,OK
把一个父类类型强制转型为子类类型,就是向下转型(downcasting),很有可能失败,如下例子

Person p1 = new Student(); // upcasting, ok
Person p2 = new Person();
Student s1 = (Student) p1; // ok
Student s2 = (Student) p2; // runtime error! ClassCastException!

参考链接:java继承

3.String源码观察
String 类在 JDK 7 源码中的定义:

public final class String implements java.io.Serializable, Comparable<String>, CharSequence{
...
}

String 是 final 类型的,不能被其他类继承,同时实现了三个接口:java.io.Serializable Comparable<String> CharSequence

String 字符串是常量,其值在实例创建后就不能被修改.

/**
The value isused for character storage.
*/
private final char value[];

内部是一个字符数组,并且是 final 类型,用于存储字符串内容。

具体参考:Java 源码分析 — String 的设计

posted @ 2019-11-09 14:36  Lo3King  阅读(252)  评论(0编辑  收藏  举报