Java中的常见基础类(一)

八大包装类

Java里面针对八大基本数据类型都有对应的包装类型的实现,因为基本数据类型只有数据,而包装数据类型新增了很多功能(对数据的操作)

在包装类和基本数据类型之间可以自动进行类型转换~~~

//自动装箱		
Long l1 = 1l;
Integer i1 = 1;
Short s1 = 1;
Byte b1 = 1;
Boolean bo1 = true;
Character c1 = 'a';
Float f1 = 1f;
Double d1 = 1d;

//自动拆箱
Integer integer = new Integer(12);
int a = integer;
// ...

当然不只是能用自动装箱,也可以进行手动装箱和拆箱

Integer integer = new Integer(12);
//手动拆箱
int a1 = integer.intValue();
//手动装箱
Integer integer2 = Integer.valueOf(1);
//其他类型
Integer integer = new Integer(12);
int a1 = integer.intValue();
float v = integer.floatValue();
// ...
integer.longValue();
integer.doubleValue();
integer.shortValue();
integer.byteValue();

Integer类型的面试题

public static void main(String[] args) {
        Integer a = -129;
        Integer b = -129;
        System.out.println(a == b); //false
        Integer a2 = -128;
        Integer b2 = -128;
        System.out.println(a2 == b2); //true
    }

上面代码的结果一个是true,另一个是false,这是为什么?两个引用数据类型不应该是比较的是内存地址吗?

关于这个内存地址,应该两个都是false吧?

来,看源码!!!

public static Integer valueOf(int i) {
        //high = 127 ,  low = -128
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

从源码中可以看到,Integer包装类里面有一个缓存池,存放-128 ~ 127范围的数字,在这个范围里面的值,返回的都是同一个对象.

当然,其他类型的对象也可以尝试看源码…

String类的常见API

String 实质上是利用字符数组帮助存储字符
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

String 最终类,内容是不可修改的,一旦修改就会产生新的对象!!!

String s = "aaa";
String aaa = s.concat("aaa");
String substring = s.substring(0, 3);
String s1 = s.replaceFirst("a", "b");
System.out.println(s); // aaa

你可能感兴趣的:(笔记)