Java 常用对象-基本类型的封装类

2017-11-04 20:39:26

基本类型封装类:基本类型的封装类的好处是可以在对象中定义更多的功能方法操作该数据。

常用操作之一:用于基本数据类型与字符串的转换。

基本类型和包装类的对应:

byte  Byte,short  Short,int  Integer,long  Long,float  Float,double  Double,char  Character,boolean  Boolean。

下面以Integer为例:

Integer:Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。

*构造方法

*常用属性

*常用方法

  • String和int的互转
        //int转String
        String s1 = String.valueOf(100);
        System.out.println(s1);

        //String转int
        int i=Integer.parseInt(s1);
        System.out.println(i);
  • 进制转换
        //十进制转二进制,八进制,十六进制
        System.out.println(Integer.toBinaryString(100));
        System.out.println(Integer.toOctalString(100));
        System.out.println(Integer.toHexString(100));

        //十进制转任何进制,进制范围为[2,36],因为0-9,a-z只有36个。
        System.out.println(Integer.toString(100,16));

        //其他进制转十进制
        //将二进制100转十进制
        System.out.println(Integer.parseInt("100",2));
  • JDK5新特性:自动拆装箱
        // 自动装箱
        Integer i=100;
        // 自动拆箱
        i+=200;
        System.out.println(i);

        // 通过反编译可以得到自动拆装箱的代码
        // Integer i=Integer.valueOf(100);
        // i=Integer.valueOf(i.intValue()+200);
        // System.out.println(String.valueOf(i));

[注意]:Integer对象不能是null。否则会出现NullPointerException。建议先判断是否为null,再使用。

  • 数据缓冲池
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1==i2);  // false
        System.out.println(i1.equals(i2));  // true

        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3==i4);  // false
        System.out.println(i3.equals(i4));  // true

        Integer i5 = 127;
        Integer i6 = 127;
        System.out.println(i5==i6);  //true
        System.out.println(i5.equals(i6));  // true

        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7==i8);  // false
        System.out.println(i7.equals(i8));  //false

在对象的比较中“==”是比较内存地址,而equals()函数默认也是比较地址,但是这里Integer类重写了该方法,所以是比较的数值大小,因此,所有的equals是一样的。

显然,如果是new出来的对象其地址一定是不同的,所以前面两个在判断“==”的时候都是false。

那么为什么自动装箱后会出现差别呢?

从上面的源码分析我们得知,自动装箱在底层其实是在调用valueof(int i)方法把int类型转成Integer类型。valueof()的源码如下:

static final int low = -128;
static final int high;

static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                try {
                    int i = parseInt(integerCacheHighPropValue);
                    i = Math.max(i, 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                } catch( NumberFormatException nfe) {
                    // If the property cannot be parsed into an int, ignore it.
                }
            }
high = h;    

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

也就是说,valueof方法在调用的时候会区别对待,在[-128,127]的数会从缓冲池中直接取,而不在这个范围的数据则会new一个对象进行返回。

  • 类型转换的时候,.valueOf()和.parseX()的区别

valueOf:返回的是个包装类

parseInt:返回的就是基本数据类型

时间: 2024-10-11 10:54:00

Java 常用对象-基本类型的封装类的相关文章

java获取对象属性类型、属性名称、属性值

因为项目需要用到,于是简单封装了一些常用的操作: [java] view plaincopy /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + field

Java 常用对象-Date类和Calender类

2017-11-02 22:29:34 Date类:类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值.它也允许格式化和解析日期字符串.不过,这些函数的 API 不易于实现国际化.从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串.Date 中的相应方法已废弃. Calender类:Calendar 类是一个抽象

Java 常用对象-Scanner类

2017-11-02 16:33:11 Scanner类:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器. Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配.然后可以使用不同的 next 方法将得到的标记转换为不同类型的值. *构造方法 *常用方法 基本格式:hasNextXxx():判断是否还有下一个输入项,其中Xxx可以是Int,Double等.如果需要判断是否包含下一个字符串,可以省略Xxx. nextXxx():获取下一个输入项. 默认情况

Java 常用对象-BigDecimal

2017-11-02 22:03:14 BigDecimal类:不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成.如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂.因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale). BigDecimal 类提供以下操作:算术.标度操作.舍入.比较.哈希算法和格式转换.toString

基本类型的封装类

/** * * <p> * 描述该类情况 {@link 代表跟谁有关系} * </p> * * @author 王超 * @since 1.0 * @date 2016年10月21日 上午10:09:29 * @see 新建|修改|放弃 * @see com.shushine.framework.第七章Java标准类库.基本类型的封装类 *      封装的目的和意义是:基本数据类型不是对象层次的结构的组成部分,它们通过值传递而不是通过引用传递. *      有时我们需要用这些简

java常用类之封装类

public class BaseTypeClassTest { /*  *   常用类  *   1.基本类型的封装类:  在Java语言中,八种基本类型均对应着一个封装类.  *   *    byte ====>>>  Byte  *    short ===>>>  Short  *    int =====>>>  Integer  *    long ====>>>  Long  *   *    float ===>

Java应该拥有对象地址类型

我认为现在的Java需要一种类型:对象地址.这在C++中是有的.理由是: 如果把数据内容当作一箱苹果或者其它什么东西,那么对象引用就是一个箱子,那么在方法间调用时,在现在的Java系统中就不得不每次都要重新使用一个新的箱子来包装这些内容,这是一个额外的消耗.你知道,这个对象引用并不是像一个指针那样有固定大小的地址记录内存块,而是足够大到能包含具体对象类型的所有内容.这样的额外消耗在某些特定目的的执行过程中将会使程序崩溃,如果想要避免它又会失去面向对象的特性从而无法实现API. 举例我看见的这个缺

Java的常用对象①②

Java的常用对象① Java的常用对象有很多,这里只对lang包中常用的Object,Date(Calendar,DateFormat,Math),System,Runtime进行介绍.㈠Object是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法.在Object中equals(Object obj),hashCode(),toString()是每个类常用到的,getClass()被用来反射,finalize()是与垃圾回收有关的方法. 其余的not

Java基础 ----- 判断对象的类型

1. 判断对象的类型:instanceOf 和 isInstance 或者直接将对象强转给任意一个类型,如果转换成功,则可以确定,如果不成功,在异常提示中可以确定类型 public static void main(String[] args) { Integer i = new Integer(10); System.out.println(i instanceof Integer); // 知道类型名 String parentClass = "java.lang.String";