包装类、String等常用类

包装类(包裹类 Wrapper) :

  1. 定义
    Java 针对八种 基本数据类型 提供了相应的包装类

  2. 目的
    使得可以创建对象

  3. 对应列表
    | 基本数据类型 | 包装类 |
    | ------ | ------ | ------ |
    | byte本 | Byte |
    | int | Integer |
    | long | Long |
    | float | Float |
    | double | Double |
    | char | Character |
    | boolean | Boolean |

  4. 基本数据类型与包装类之间的转换

  • 装箱:将基本数据类型转换成对应的包装类
    ①使用对应包装类的构造器
    ②使用对应包装类的静态方法 valueOf()

  • 拆箱:将包装类转换成对应的基本数据类型
    ①通过对应包装类的 xxxValue()
    xxx :代表基本数据类型

  1. 基本数据类型、包装类 与 String 之间的转换
  • 基本数据类型、包装类 转换成 String
    ①String str = i + "";
    ②使用对应包装类的静态方法 toString()
    ③使用 String 类的静态方法 valueOf()

  • String 转换成 基本数据类型、包装类
    ①通过对应包装类的构造器
    ②使用对应包装类的静态方法 parseXxx()
    ③使用对应包装类的静态方法 valueOf()

  1. 自动装箱与自动拆箱(jdk1.5 后)
    Integer num = 10; //自动装箱
    int i = num; //自动拆箱
    Integer num1 = 100;
    Integer num2 = 100;
    System.out.println(num1 == num); //true
    Integer num3 = 129;
    Integer num4 = 129;
    System.out.println(num3 == num4);//false

注意:Integer 提供了一个小的缓存(-128 ~ 127) 之间,若需要装箱的值在该取值范围内,则从缓存中取一个实例
若超出该取值范围内,则 new Integer() 实例

  1. 示例
public class WrapperTest {
    
    //String 转换成对应的基本数据类型、包装类
    @Test
    public void test6(){
        
        String str1 = "123";
        int num = Integer.parseInt(str1);
        System.out.println(num);
        
        String str2 = "15.6";
        double d1 = Double.parseDouble(str2);
        System.out.println(d1);
        
        String str3 = "false";
        boolean b1 = Boolean.parseBoolean(str3); //除了 true 以外,其他都为 false
        System.out.println(b1);
        
        System.out.println("----------------------------------------------------");
        
        Integer num1 = new Integer(str1);
        System.out.println(num1);
        
        Double d2 = new Double(d1);
        System.out.println(d2);
        
        System.out.println("----------------------------------------------------");
        
        Integer num2 = Integer.valueOf(str1);
        System.out.println(num2);
        
        Double d3 = Double.valueOf(str2);
        System.out.println(d3);
    }
    
    //基本数据类型、包装类 转换成 String
    @Test
    public void test5(){
        int a = 10;
        
        String str1 = a + "";
        
        String str2 = Integer.toString(a);
        System.out.println(str2);
        
        float f1 = 15.6f;
        String str3 = Float.toString(f1);
        System.out.println(str3);
        
        char ch = 'a';
        String str4 = Character.toString(ch);
        System.out.println(str4);
        
        System.out.println("------------------------------");
        
        String str5 = String.valueOf(a);
        System.out.println(str5);
        
        String str6 = String.valueOf(f1);
        System.out.println(str6);
        
        String str7 = String.valueOf(ch);
        System.out.println(str7);
    }
    
    //自动装箱与自动拆箱
    @Test
    public void test4(){
        /*int a = 10;
        
        Integer num = a;
        
        int b = num;*/
        
        Integer num1 = 100;
        Integer num2 = 100;
        System.out.println(num1 == num2); //true
        
        Integer num3 = 150;
        Integer num4 = 150;
        System.out.println(num3 == num4);//false
    }
    
    //拆箱
    @Test
    public void test3(){
        //装箱
        Integer num = new Integer(10);
        
        //拆箱
        int a = num.intValue();
        System.out.println(a);
        
        Float f1 = new Float(15.6f);
        float f2 = f1.floatValue();
        System.out.println(f2);
        
        Boolean b1 = new Boolean(true);
        boolean b2 = b1.booleanValue();
        System.out.println(b2);
    }
    
    //装箱
    @Test
    public void test2(){
        int a = 10;
        
        Integer num = Integer.valueOf(a);
        System.out.println(num);
        
        float f1 = 15.6f;
        Float f2 = Float.valueOf(f1);
        System.out.println(f2);
    }
    
    //装箱
    @Test
    public void test1(){
        int a = 10;
        
        Integer num = new Integer(a);
        System.out.println(num);
        
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        
        System.out.println(Integer.toBinaryString(a));
        System.out.println(Integer.toHexString(a));
        System.out.println(Integer.toOctalString(a));
        
        System.out.println("-----------------------");
        
        float f1 = 15.6f;
        Float f2 = new Float(f1);
        System.out.println(f2);
        System.out.println("-----------------------");
        
        char ch = 'a';
        Character ch2 = new Character(ch);
        System.out.println(ch2);
    }
}

java.lang.String

  1. 为什么String是不可变的字符序列?
    String str1 = "abc";
    String str2 = new String("abc");
    使用“ ”括起来的都是不可变常量。因为它在内存中 是 固定长度的 char[]

  2. str1和str2二者的区别?

  • str1:代表一个对象,至少在内存中开辟一块内存空间。
    (str1)常量池
  • str2:代表两个对象,至少在内存中开辟两块内存空间。
    (str2 ) 堆内存
    ( "abc")方法区中的常量池
  1. 内存图


    image.png
  • 经典例题
//下列程序运行的结果
public class Test1 {
    String str = new String("good");
    char[] ch = { 't', 'e', 's', 't' };
    public void change(String str, char ch[]) {
        str = "test ok";      good   test ok
        ch[0] = 'g';          gest
    }
    public static void main(String[] args) {
        Test1 ex = new Test1();
        ex.change(ex.str, ex.ch);
        System.out.print(ex.str + " and ");  good    gets
        System.out.println(ex.ch);
    }
}
A.good and test
B.good and gest
C.test ok and test
D.test ok and gest
  1. 思路:
    1 main程序执行开始
    2 执行创建对象
    3 调用方法
    4 输出结果

  2. 内存图


    image.png

StringBuffer 和 StringBuilder

  1. 定义
    可变的字符序列。
    二者拥有兼容的 API (说明两者用法一模一样)

  2. 区别
    StringBuffer :是线程安全的,因此效率低
    StringBuilder :是线程不安全的,因此效率高

  3. 常用方法:

  • StringBuffer append(String str) : 添加
  • StringBuffer insert(int offset, String str) : 插入
  • StringBuffer replace(int start, int end, String str):替换
  • int indexOf(String str) :返回子串的位置索引
    int lastIndexOf()
  • String substring(int start, int end):截取子字符串序列
  • StringBuffer delete(int start, int end):删除一段字符串
  1. 三者的创建
  • String创建
    String str="abc";
    String str1=new String("abc");
  • StringBuffer 创建
    String Buffer sb=new StringBuffer("abce");
  • StringBuilder创建
    String Buffer sb=new StringBuffer("bdef");
  1. 三者的互相转换
  • String—>StiringBuffer
    方法一:Buffer/Builder构造器

    方法二:StiringBuffer append()(拼串)

  • StringBuffer—>String
    方法一: String toString()
    方法二:String 构造器

  • StringBuilder—>String(二者拥有兼容的 API)

  1. 三者效率对比
    StringBuilder > StringBuffer > String

java.util.Date

  1. 表示当前的时间,精确到毫秒

  2. java.text.DateFormat
    一个抽象类,用于格式化日期/时间。

  3. java.text.SimpleDateFormat
    是 DateFormat 的子类

  4. 运用

//获取当前系统时间    
public void test1() throws ParseException {
        Date date = new Date();
        System.out.println(Date);
}
    
//格式化时间
public void test2() throws ParseException {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
        String strDate = sdf.format(date);
        System.out.println(strDate);
        //转换回系统时间
        Date newDate = sdf.parse(strDate);
        System.out.println(newDate);
}

java.lang.Math 类

用于数学运算

  1. double ceil(double d) : 返回不小于d的最小整数
  2. double floor(double d): 返回不大于d的最大整数
  3. int round(float f) : 返回最接近f的int型(四舍五入)
  4. long round(double d):返回最接近d的long型
  5. double max(double d1, double d2) : 返回较大值
  6. int min(int i1, int i2) : 返回较小值
  7. double random() : 返回一个大于等于0.0并且小于1.0的随机数

java.util.Calendar

日历类

    @Transactional(rollbackFor = Exception.class)
    public void start() {
        synchronized (AdvPoolJobHandler.class) {
            //当前时间
            Timestamp timestamp = new Timestamp(new Date().getTime());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            String checkTime = simpleDateFormat.format(timestamp);

            String cycleContent = "7";
            String value = generateDate(cycleContent);
    }

    private String generateDate(String cycleContent) {
        //地区
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        //模式,加天数
        calendar.add(Calendar.DAY_OF_MONTH, +Integer.parseInt(cycleContent));
        //格式化
        Timestamp timestamp = new Timestamp(calendar.getTime().getTime());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = simpleDateFormat.format(timestamp);
        //响应结果
        return format;
    }

java.math.BigDecimal

支持任意精度的double数

  1. 加减乘除
 public BigDecimal add(BigDecimal value);                        //加法
 public BigDecimal subtract(BigDecimal value);                   //减法 
 public BigDecimal multiply(BigDecimal value);                   //乘法
 public BigDecimal divide(BigDecimal value);                     //除法
  1. 四舍五入
    @Test
    public void test2() {
        double num = 111231.5585;
        BigDecimal b = new BigDecimal(num);
        //保留2位小数
        double result = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println(result);  //111231.56
    }

BigDecimal.setScale()方法用于格式化小数点

setScale(1)表示保留一位小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

  1. BigDecimal比较
    BigDecimal是通过使用compareTo(BigDecimal)来比较的
    @Test
    public void test4() {
        BigDecimal a = new BigDecimal("1");
        BigDecimal b = new BigDecimal("2");
        BigDecimal c = new BigDecimal("1");
        int result1 = a.compareTo(b);
        int result2 = a.compareTo(c);
        int result3 = b.compareTo(a);
 
        System.out.println(result1);  //-1
        System.out.println(result2);  //0
        System.out.println(result3);  //1
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 3.Object类 所有引用类型的父类,除了它自己以外 Object类是所有类的父类? 如果有其他明显正确的答案,...
    两串大腰子阅读 398评论 0 1
  • 从网上复制的,看别人的比较全面,自己搬过来,方便以后查找。原链接:https://www.cnblogs.com/...
    lxtyp阅读 1,343评论 0 9
  • java中String的常用方法 1、length()字符串的长度 例:char chars[]={'a','b'...
    赤赤有名阅读 2,025评论 0 10
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 6,932评论 0 9
  • 1、鱼 鱼是促进智力发育的首选食物之一。鱼头中含有十分丰富的卵磷脂,是人脑中神经递质的重要来源,可增强人的记忆、思...
    蓝颜小琪阅读 612评论 0 0