java笔记
  • Java语言概述
  • 入门
    • ubuntu安装
    • window配置环境变量
    • 编写HelloWorld
    • 注释
    • 编程风格
    • 进制与字符编码
    • 键盘录入
  • java基础
    • 数据类型
    • 运算符与类型转换
    • 控制语句
      • 选择结构(if-else/swtich)
      • 循环结构(while/do-while/for)
    • 数组
      • 数组基础
      • 数组进阶
    • 面向对象
      • 基础
        • 面向过程和面向对象
        • 类与对象
        • 构造方法
        • 垃圾回收机制garbage collection
        • 关键字
      • 进阶
        • 封装
        • 继承
        • 多态
        • 抽象
        • 内部类
      • 高级特性
        • String类
        • 枚举
        • 注解
    • 异常
    • 常用类
      • 包装类
      • String相关类
      • 时间类
      • 数学类
      • File类
      • 枚举类
    • 单个字符操作(Character 类)
    • Java字符串
      • String
      • StringBuilder
      • StringBuffer
    • Java集合
    • Java 泛型
    • Java解惑
  • 附录:git
  • 附录:转义字符
  • maven
    • pom.xml
    • maven安装
  • 其他
    • BeanUtils
  • java与php语法对比
  • idea
  • 开发记录
  • ExecutorService 异步线程池
Powered by GitBook
On this page
  • String
  • StringBuffer和StringBuilder
  • 常用方法
  • 时间内存对比

Was this helpful?

  1. java基础
  2. 常用类

String相关类

String

  • 1.String是不可变的字符数列,因为源码加了final修饰。

  • 2.字符串比较

最好用equals方法(如果不明白,请看面向对象的==与equals)。

package com.itcode.demo4;  

/** 
 * @Auther: 成都码到功成学员 
 * @Description: 
 * String类测试 
 */  
public class TestWrapper3 {  

    public static void main(String[] args) {  
        //  
        String a = "码到功成";  
        String b = "码到" + "功成";// 编译器自动优化拼接变成"码到功成"  
        System.out.println(a==b);// true  
        String c = "码到";  
        String d = "功成";  
        String e = c + d;  
        System.out.println(e==a);//false  
    }  
}

StringBuffer和StringBuilder

概述:是可变的字符数列。StringBuffer和StringBuilder都继承了抽象类AbstractStringBuilder,源码中 ,没有加final修饰。它们的区别是:

  • StringBuffer:安全,效率低。

  • StringBuilder:不安全,效率高(一般使用这个)。

示例:

package com.itcode.demo4;  

/** 
 * @Auther: 成都码到功成学员 
 * @Description: 
 * StringBuffer类测试 
 */  
public class TestWrapper4 {  

    public static void main(String[] args) {  
        //  
        StringBuffer sb = new StringBuffer("abc123");  
        System.out.println(sb);  
        System.out.println(Integer.toHexString(sb.hashCode()));//打印哈希值  
        sb.setCharAt(2,'S');//把下标2的值替换为S  
        System.out.println(sb);  
        System.out.println(Integer.toHexString(sb.hashCode()));  
    }  
}

效果:

看哈希值都是1b6d356。

常用方法

StringBuffer和StirngBuilder的方法几乎一模一样。

它们有些方法和String类似,比如: indexOf(String str)、indexOf(String str, int fromIndex)、length()、charAt(int index)、substring(int start, int end)、substring(int start)。

特有方法请看代码示例:

package com.itcode.demo4;  

/** 
 * @Auther: 成都码到功成学员 
 * @Description: 
 * StringBuffer和StringBuilder类测试 
 */  
public class TestWrapper4 {  

    public static void main(String[] args) {  
        //  
        StringBuilder sb = new StringBuilder();  
        // 打印26个字母  
        for (int i=0; i<26;i++){  
            sb.append((char)('a'+i));  
        }  
        System.out.println(sb);  
        System.out.println(sb.reverse());//反转  
        sb.setCharAt(1, '好');// 替换  
        System.out.println(sb);  
        sb.insert(0, "成都").insert(1,"码到功成");// 插入  
        System.out.println(sb);  
        sb.delete(5, 10);// 删除  
        System.out.println(sb);  
    }  
}

效果:

时间内存对比

可变比不可变更不占空间和耗用内存。

示例:

package com.itcode.demo4;  

/** 
 * @Auther: 成都码到功成学员 
 * @Description: 
 * 测试String和StringBuilder做一样的事占用内存和时间比较 
 */  
public class TestWrapper5 {  

    public static void main(String[] args) {  
        // String  
        String s = "";  
        long num1 = Runtime.getRuntime().freeMemory();// 测试内存  
        long time1 = System.currentTimeMillis();// 获取时间毫秒值  
        for(int i=0; i<5000;i++){  
            s += i;//相当于创建10000个对象  
        }  
        long num2 = Runtime.getRuntime().freeMemory();// 测试内存  
        long time2 = System.currentTimeMillis();// 获取时间毫秒值  
        System.out.println("String所占内存:"+(num1-num2));  
        System.out.println("String所花时间:"+(time2-time1));  
        // String  
        StringBuilder sb = new StringBuilder();  
        long num3 = Runtime.getRuntime().freeMemory();// 测试内存  
        long time3 = System.currentTimeMillis();// 获取时间毫秒值  
        for(int i=0; i<5000;i++){  
            sb.append(i);  
        }  
        long num4 = Runtime.getRuntime().freeMemory();// 测试内存  
        long time4 = System.currentTimeMillis();// 获取时间毫秒值  
        System.out.println("StringBuilder所占内存:"+(num3-num4));  
        System.out.println("StringBuilder所花时间:"+(time4-time3));  
    }  
}

效果:

Previous包装类Next时间类

Last updated 5 years ago

Was this helpful?