Java学习 ---- StringBuffer、Arrays与包装类

Day13.01_____StringBuffer类的构造方法

  • public StringBuffer(){}
    构造一个不带字符的字符串缓冲区,其池子的初始容量为16个字符
  • public StringBuffer(int capacity)
    构造一个不带字符的字符串缓冲区,其池子的初始容量为capacity个字符
  • public StringBuffer(String str)
    构造一个字符串缓冲区,其池子的初始容量为(16+str长度)个字符


Day13.02_____StringBuffer类的方法

  • capacity()(了解)
    获取字符串缓冲区的初始容量大小,即理论值,可以通过StringBuffer()的构造方法改变其值的大小
  • length()
    获取字符串的长度,即实际值
    • (1) capacity()与length()的区别:
      length()获取的是字符串的实际长度,该方法常用capacity()获取的是容量池的大小,该方法不常用
  • append()
    返回值类型StringBuffer,作用是往StringBuffer对象中追加对象
    (1) 例子
    StringBuffer sb = new StringBuffer();
    StringBuffer sb2 = sb.append(true);
    StringBuffer sb3 = sb.append(123);
    StringBuffer sb4 = sb.append(“你好”);
    System.out.print(sb); true123你好
    System.out.print(sb2); true123你好
    System.out.print(sb3); true123你好
    System.out.print(sb4); true123你好
    解释:这里利用了StringBuffer类中的可变性,为什么可变?是因为sb、sb2、sb3、sb4引用都指向同一个地址,因此输出的结果为最后append()完以后的结果
  • insert(int offset,int i)
    返回值类型StringBuffer,作用是往StringBuffer对象中,在指定的位置添加数据,添加的数据可以是基本数据类型的,也可以是String类型的,也可以是Object对象
    (1) 例子
    StringBuffer sb = new StringBuffer(“itcast”);
    sb.insert(1, “heima”);
    System.out.print(sb); //iheimatcast
    解释:1表示在索引1的位置插入字符串heima,因此tcast会往后挪
  • deleteCharAt(int index)
    返回值类型StringBuffer,作用是删除指定索引处的字符
  • delete(int start,int end)
    返回值类型StringBuffer,作用是删除从开始索引到结束索引的字符串,包含头,不包含尾
    注意:清空缓冲区
    sb.delete(0,sb.length());
  • replace(int start,int end,String str)
    返回值类型StringBuffer,作用是替换从指定索引start开始到end结束的字符串
  • reverse()
    返回值类型StringBuffer,作用是将缓冲区的字符反转
  • substring(int start)
    返回值类型String,作用是将缓冲区的字符串从start开始进行截取
  • substring(int start,int end)
    返回值类型String,作用是将缓冲区的指定字符串从start( 取 )开始到end( 不取 )结束进行截取


Day13.03_____StringBuffer与String之间的转换

  • StringBuffer ----> String
    • 通过substring(int start , int end)
    • 通过toString()方法
    • 通过String类的构造方法 String str = new String(sb)
  • String ----> StringBuffer
    • 通过StringBuffer类的构造方法
      StringBuffer sb = new StringBuffer(str)
    • 通过append()方法


Day13.04_____String、StringBuffer、StringBuilder的区别

  • String是不可变的字符串序列;
    StringBuffer和StringBuilder是可变的字符串序列
  • StringBuffer是线性安全的,因此效率比较低;
    StringBuilder是线性不安全的,因此效率比较高


Day13.05_____String和StringBuffer作为参数进行传递

  • 例子:
    class Demo{
    			public static void main(String[] args){
    			     String str = new String("abc");
    			     StringBuffer sb = new StringBuffer("abc")
    			     change(str);
    			     System.out.print(str);	// abc
    			     change(sb);
    			     System.out.print(sb);	//abcheima
    			}
    			public static void change(String str){
    			     str = str + "def";
    			}
    			public static void change(StringBuffer sb){
    			     sb.append("heima");
    			}
    }
    
    解释:为什么调用String对象作为参数的方法后输出的仍然是abc,而调用StringBuffe对象作为参数的方法后输出的是abcheima?
    根据String类和StringBuffer类的性质来解释,因为String类是不可变的字符串序列,对象一旦被创建后不可被修改,除非将原来的对象变成垃圾;而StringBuffer类是可变的字符序列,对象被创建后可以被修改


Day13.06_____冒泡排序和选择排序

  • 冒泡排序:
    将数组中的前一个数与后一个进行比较,最先将最大的值放到数组最后,代码实现需要用到大圈套小圈思想
  • 选择排序:
    将数组的第一个数分别与后面的数进行比较,最先将最小的数放到数组最前,代码实现需要用到大圈套小圈思想


Day13.07_____二分查找法

  • 注意事项:
    使用该方法有一个前提,数组必须是由小到大排列的
  • 思想:
    首先取出数组的中间值,将这个中间值与需要找的数进行比较如果中间值>需要找的数,就将中间值右边的所有数pass掉,再继续到左边去寻找


Day13.08_____Arrays类

  • sort()
    对数组进行升序排序
  • toString()
    将数组转换成字符串


Day13.09_____基本数据类型的包装类

  • 为什么要有基本数据类型的包装类呢?
    因为基本数据类型是不能创建对象并调用方法的,如果有了包装类,我们就可以封装方法提供给我们使用,比如说把一个整数转换成二进制
  • 基本数据有哪些? ( 四类八种 )
    基本数据                包装类
        byte                     Byte
        short                    Short
         int                      Integer
        long                      Long
        float                      Float
       double                  Double
        char                   Character
       boolean               Boolean


Day13.10_____Integer包装类的构造方法

  • public Integer(int i)
    将一个基本数据类型为int的数据转换成一个Integer对象
  • public Integer(String s)
    将一个数字字符串转换成一个Integer对象。需注意的是,字符串必须是数组类型的,否则会报错


Day13.11_____int与String之间的相互转换

  • int ----> String
    (1) 和""进行拼接
    (2) 通过String类中的valueOf(int i )
  • String ----> int
    (1) 通过Integer类的parseInt(String s)
    注意:在八种基本类型中,除了racter没有parseXxx()方法外其余的7种类型都有parseXxx()方法


Day13.12_____自动拆箱和自动装箱( JDK1.5版本以后的特性 )

  • 自动拆箱
    int x = 10; 把对象转换成基本数据类型
    Integer i = x;
    JDK1.5版本以前的做法:Integer i = new Integer(x);
  • 自动装箱
    Integer i = x; 把基本数据类型变成对象
    x = i + 20;
    JDK1.5版本以前的做法:int x = i.intValue( );


Day13.13_____Integer面试题

  • 例子1:
    Integer i1 = new Integer(128);
    Integer i2 = new Integer(128);
    System.out.println(i1 == i2); //false
    System.out.println(i1.equals(i2)); //true
    解释:因为使用了new关键字,所以在创建对象的时候会在堆内存中创建,有几个new关键字就会创建几个对象,i1和i2是两个对象
  • 例子2:
    Integer i3 = new Integer(97);
    Integer i4 = new Integer(97);
    System.out.println(i3 == i4); //false
    System.out.println(i3.equals(i4)); //true
    解释:和上面一样
  • 例子3:
    Integer i5 = 127;
    Integer i6 = 127;
    System.out.println(i5 == i6); //true
    System.out.println(i5.equals(i6)); //true
    解释: 首先我们需要知道一个概念,在我们第一次Integer i5 = 127时会在底层创建一个数组用于存储-128到127之间的Integer对象值,然后从数组中去获取Integer对象;第二次Integer i6 = 127后不会再去创建一个对象数组,而是会从第一次创建的对象数组中去获取对象。因此两次指向的是同一对象,这个解释和String类的常量池相似。由此我们可以推断出,当创建两个Integer对象赋值范围在-128—127之间时,它们指向的时同一地址
  • 例子4:
    Integer i7 = -129;
    Integer i8 = -129;
    System.out.println(i7 == i8); //false
    System.out.println(i7.equals(i8)); //true
    解释:解释和上面同理,i7 == i8为false的原因是它们超出了一个字-128—127的取值范围
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值