归纳
- Integer和Long都继承自Number类,该类的方法均为类型转换,如intValue()
- 均为有符号整数,大小分别为
-2^31~2^31-1
和-2^63~2^63-1
- Integer和Long都可以转为多种进制的字符串,静态方法toString(int,radix)
- 多种进制的字符串转为Integer和Long,使用valueOf(String,radix)
JDK描述
public final class Integer
extends Number
implements Comparable
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。
此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。
public final class Long
extends Number
implements Comparable
Long 类在对象中包装了基本类型 long 的值。每个 Long 类型的对象都包含一个 long 类型的字段。
此外,该类提供了多个方法,可以将 long 转换为 String,将 String 转换为 long,除此之外,还提供了其他一些处理 long 时有用的常量和方法。
代码分析
Integer和Long类比较类似,放在一起看了
继承了Number类,实现了一个接口
- Number是Integer和Long的父类,其实现了Serializable接口,支持序列化;在java中,很多数字类型的类都是Number类的子类,如常见的Byte、Double、Float、Long、Short,还有AtomicInteger、AtomicLong、BigDecimal等。
Number类需要实现下列方法,便于类型转换
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
public byte byteValue()
public short shortValue()
- Comparable接口,实现compareTo方法,实现比较
变量
- private final int value; 保存值,Integer是有符号的,0为正,1为负数
- public static final int MIN_VALUE = 0x80000000; 最小值 1000...0000 -2^31
- public static final int MAX_VALUE = 0x7fffffff; 最大值 0111...1111 2^31-1
- public static final Class
- final static char[] digits ;保存所有可展现数字的char,包括0-9 a-z
- public static final long MIN_VALUE = 0x8000000000000000L;最小值 -263
- public static final long MAX_VALUE = 0x7fffffffffffffffL;最大值 263-1
- public static final Class
构造方法
- public Integer(int value) ;this.value = value;
- public Integer(String s) ;this.value = parseInt(s, 10);
其他方法
转字符串
- public static String toString(int i, int radix);根据进制返回字符串,进制范围为2-36
- public static String toHexString(int i) ;返回16进制字符串,toUnsignedString的shift为4
- public static String toOctalString(int i);返回8进制字符串,toUnsignedString的shift为3
- public static String toBinaryString(int i) ;返回2进制字符串,toUnsignedString的shift为1
- private static String toUnsignedString(int i, int shift);计算mask后从digits中取字符
- public static String toString(int i) 返回字符串
其他对象转Integer
- public static int parseInt(String s, int radix);将字符串转为int
- public static int parseInt(String s);默认10进制
- public static Integer valueOf(String s, int radix)
- public static Integer valueOf(String s)
- public static Integer valueOf(int i);先从cache中取,若无new Integer
转其他类型,均为强转
- public byte byteValue()
- public short shortValue()
- public int intValue()
- public long longValue()
- public float floatValue()
- public double doubleValue()
其他方法
- public int hashCode() 返回value
- public boolean equals(Object obj) obj必须是Integer;i.equals(23) 23会被装箱为Integer
- public static Integer getInteger(String nm);从System.getProperty中获取Integer的值
- public static Integer decode(String nm) ;将nm解码为Integer,nm
- public int compareTo(Integer anotherInteger);比较
- public static int compare(int x, int y);比较
decode(String nm)可解码的字符串
Signopt 0x HexDigits
Signopt 0X HexDigits
Signopt # HexDigits
Signopt 0 OctalDigits
其他
- int i=3;int到Integer会调用Integer.valueOf(3)方法,将-128~127缓存到IntegerCache,缓存的原因是java规范这样规定了
相关问题
观察下面的代码
Integer k=new Integer(23);
Integer j=Integer.valueOf("23");
System.out.println(k==j);//返回false
Integer i=23;
Integer j=Integer.valueOf("23");
System.out.println(i==j);//返回true,缓存了
Integer i=223;
Integer j=Integer.valueOf("223");
System.out.println(i==j);//返回false,未缓存
总结
- System.getProperty
- highestOneBit