Java--常用类

目录

包装类

基本知识

 Number类

 包装类的用途

 自动装箱和拆箱

包装类缓存问题

 

字符串相关类


前提:

Java--常用类_第1张图片

+

包装类

我们前面学习的把八种基本数据类型并不是对象,为了将基本类型数据和对象之间实现互相转化,Java为每一个基本数据类型提供了相应的包装类。

基本知识

Java 是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据 类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。 比如:将基本数据类型存储到 Object[ ]数组或集合中的操作等等。

   包装类位于Java.lang包,如图八种包装类和基本数据类型的对应关系:

Java--常用类_第2张图片

  其中八个类名中除了Integer 和Character类以外,其他六个类的类名和基本数据类型一致,只是类名的第一个字母大写而已。 

 Number类

    Number 类是抽象类,因此它的抽象方法,所有子类都需要提供实现。Number 类提供了 抽象方法:intValue()、longValue()、floatValue()、doubleValue(),意味着所有的“数 字型”包装类都可以互相转型。

//基本数据类型转为对象
        Integer i=new Integer(300);
        Integer i2=Integer.valueOf(20);

Java--常用类_第3张图片

 包装类的用途

  • 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如 Object[ ]、集合等 的操作。
  • 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操 作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化!)。

 自动装箱和拆箱

自动装箱(autoboxing)和拆箱(unboxing):将基本数据类型和包装类自动转换。

 自动装箱

    基本类型的数据处于需要对象的环境中时,会自动转为“对象”。

自动拆箱:

   每当需要一个值时,对象会自动转成基本数据类型,没必要再去显示调用intValue()等转型方法

   其本质是:自动装箱与拆箱的功能是编译器来帮忙,编译器在编译时依据您所编写的语法,决定是 否进行装箱或拆箱动作。

包装类缓存问题

     整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存 处理,其目的是提高效率。

     缓存原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个 数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。

package com.bjsxt;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

public class baozhuang {
    public static void main(String[] args) {

        //基本数据类型转为对象
        Integer i=new Integer(300);
        Integer i2=Integer.valueOf(20);


        System.out.println(i);
        System.out.println(i2);

        //包装类对象转为基本数据类型
        double d=i2.doubleValue();
        System.out.println(d);

        //将字符串数字转为字符串
        Integer i3=Integer.valueOf("1213");

          //将包装类对象转成字符串
        String s=i3.toString();

        //常用的常量
        System.out.println(Integer.MAX_VALUE);

        //自动装箱
        Integer a=300;//编译器帮改成: Integer a=Inreger.valueod(300);

        //自动拆箱
        int b= a ;  //自动修改为:a.intValue();


        //包装类的缓存问题
        Integer dd1=4000;
        Integer dd2=4000;
        //当数字在[-128,127]之间时,返回缓存数组中的某个元素
        Integer dd3=123;
        Integer dd4=124;



        System.out.println(dd1==dd2);//false
        System.out.println(dd1.equals(dd2));//true




    }

}

 

package com.bjsxt;

public class MyInteger {

    private int value;
    private static MyInteger[] cache=new MyInteger[258];

    static {
        for (int i = -128; i <127 ; i++) {
            cache[i+128]=MyInteger.valueOf(i);
        }
    }

     private  MyInteger(int i) {
        this.value=i;
    }

    public static MyInteger valueOf(int i){
        if(i>=-128&&i<=127)
        {
            return cache[i+128];
        }

        return new MyInteger(i);
    }

    public static void main(String[] args) {
        MyInteger m=MyInteger.valueOf(123);
    }


}

字符串相关类

    String类代表不可变的 字符序列     而StringBuilder类和StringBuffer类代表可变字符序列

  • StringBuilder 线程不安全,不做线程同步检查,因此效率高 (推荐)
  • StringBuffer   线程安全,做线程同步检查,效率较低

Java--常用类_第4张图片

 

package com.bjsxt;

public class TestString {
    public static void main(String[] args) {
        String str="aabb";

        StringBuffer sb=null;
        StringBuffer sb1=null;

        sb= new StringBuffer("gao");


        sb.append("aa").append("bb").append("cc");
        System.out.println(sb);

        StringBuffer ss=new StringBuffer("江理");
        ss.insert(0,"爱").insert(0,"我");
        System.out.println(ss);


        ss.delete(0,2);//左开右闭
        System.out.println(ss);
    }



}

你可能感兴趣的:(linq,p2p,c#)