文章目录

  • String类
  • 常用方法
  • 可变字符串


String类

  1. 字符串是常量,创建之后不可改变。
  2. 字符串字面值存储在字符串池中,可以共享。
  3. String s = "Hello";产生一个对象,字符串池中存储。
    String s = new String(“Hello”);产生两个对象,堆、池各存储一个。
package string;

public class textMethod {
    public static void main(String[] args) {
        String str1 = "Hello World,w";  //引用变量,指向字符串所在的常量池
        str1 = "java";  //重新指向一个常量池
        String str2 = new String("java");  //引用变量指向堆,堆指向常量池
        String str3 = "java";

        System.out.println(str1);
        System.out.println(str2);
        
        //简单理解:equals比较的是具体的值,==比较的是地址
        System.out.println(str1==str2);//F
        System.out.println(str1.equals(str2));//T
        System.out.println(str1==str3);//T
        System.out.println(str1.equals(str3));//T
    }
}

java字符串的变量对应格式 java 字符串转变量名_字符串

java中的堆、栈和常量池 堆:存放所有new出来的对象
栈:存放基本类型的变量数据和对象的引用
常量池:存放基本类型常量和字符串常量
java面试题之equals和==的区别 我没有重写equals方法,默认可以理解为equals比较的是具体的值,==比较的是地址。

常用方法

通常就是以字符串常量.方法名(参数)的当时调用:

  • public int length():返回字符串的长度。
  • public char charAt(int index):根据下标获取字符。
  • public boolean contains(String str):判断当前字符串中是否包含str。区分大小写
  • public lxhar[] toCharArray() :将字符串转换成数组。
  • public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
    public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。
  • public String trim() :去掉字符串前后的空格。
  • public String toUpperCase() :将小写转成大写。
  • public boolean endWith(String str):判断字符串是否以str结尾。
  • public String replace(char oldChar, qar newChar);将旧字符串替换成新字符串
  • public String[] split(String str):根据str做拆分。
package string;

import java.util.Arrays;
import java.util.Locale;

public class textMethod {
    public static void main(String[] args) {
        String str1 = " Hello World,";
        String str2 = "java";

        System.out.println(str1);
        System.out.println(str2);

        System.out.println(str1.length());//字符串长度
        System.out.println(str1.charAt(3));//根据下标获取字符,类似str1[3](Java不可用这种方法)
        System.out.println(str1.contains("Hello"));//判断是否包含,需要区分大小写
        System.out.println(str1.indexOf("Wor"));//首次出现下标
        System.out.println(str1.endsWith("d,"));//是否结尾
        System.out.println(Arrays.toString(str1.toCharArray()));//字符串转换为数组
        System.out.println(str1.trim());//去掉前后空格
        System.out.println(str1.toUpperCase(Locale.ROOT));//大小写转换
        System.out.println(str1.replace("World", "Java"));//字符串替换

        String arr[] = str1.split(" ");//拆分
        for (String s : arr) {
            System.out.println(s);
        }
    }
}

/*
 Hello World,
java
13
l
true
7
true
[ , H, e, l, l, o,  , W, o, r, l, d, ,]
Hello World,
 HELLO WORLD,
 Hello Java,

Hello
World,
 */

可变字符串

  • StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全。
  • StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全。

可变字符串能够动态的分配字符串的空间。所以可以增加、插入等。

package string;

public class addText {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("Hello");
        System.out.println(str);

        str.append("world");//追加
        System.out.println(str);
        str.insert(5, ",");//插入
        System.out.println(str);
        str.replace(5,6,"   ");//替换,区间左开右闭
        System.out.println(str);
        str.delete(5,7);//删除
        System.out.println(str);
    }
}
/*
Hello
Helloworld
Hello,world
Hello   world
Hello world
 */

和String区别:(1)效率比String高;(2)比String节省内存。

package string;

public class timeText {
    public static void main(String[] args) {
        long sTime = System.currentTimeMillis();
        String s1 = new String(" ");
        for (int i = 0; i < 1000; i++) {
            s1 += i;
        }
        long eTime = System.currentTimeMillis()-sTime;
        System.out.println("String类运行时间:"+eTime);
        long sTime2 = System.currentTimeMillis();
        StringBuffer s2 = new StringBuffer(" ");
        for (int i = 0; i < 1000; i++) {
            s2.append(i);
        }
        long eTime2 = System.currentTimeMillis()-sTime2;
        System.out.println("StringBuffer类运行时间:"+eTime2);
    }
}

/*
String类运行时间:6
StringBuffer类运行时间:1
 */