JAVA中的String对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中的String对象相关的知识,希望对你有一定的参考价值。

String 对象的特点

  1. String对象的数据不可改变!

  2. String类型对象封装了一个字符串数组

  3. 任何的操作也不能改变这个字符数组的内容

    String s = "123";
    String ss = s;
    s = s+"abc";
    System.out.println(s);//123abc
    System.out.println(ss);//123

说明: 在如上代码中改变的是字符串引用变量,但是字符串没有变!好处是字符串可以“作为”基本类型使用!

原理:

技术分享图片技术分享图片

字符串常量的重用现象

Java中的字符串常量是尽肯能重复使用的!好处是节省资源(内存)

  1. 字符串字面量(直接量)在内容一样时候重用同一个String对象。 String s1 = "123abc"; String s2 = "123abc"; //s1 s2 是字符串类型的引用变量 //"123abc" 是直接量(字面量)

  2. 字符串常量也参与重用!

  3. 字面量、常量的运算结果是字符串,也重用同一个字符串 String s4 = "123abc"; String s5 = 123 + "abc";//1+"23abc" System.out.println(s4==s5);//true

  4. 字符串变量,变量的运算结果 和 新创建的字符串对象不参与重用!! String name = in.nextLine();//Tom String s1 = "Tom and Jerry"; String s2 = name + " and Jerry"; System.out.println(s1==s2);//false String s3 = new String("Tom and Jerry"); System.out.println(s3==s1);//false

原理:

技术分享图片技术分享图片

经典题目:

String s1 = "1"+"23"+"abc";
String s2 = "1"+23+"abc";
String s3 = '1'+23+"abc";
System.out.print(s1==s2);
System.out.print(s1==s3);

如上代码的执行结果:
A.truetrue B.truefalse C.falsetrue D.falsefalse

字符串中的字符

字符串中封装了一个字符数组,字符串中的字符就是char类型的数据。

  1. char 类型是整数, 是一个字符的Unicode编码。

  2. 16位无符号整数, 占用2个字节

案例:

String s = "Tom and Jerry";
//          0123456789012
char c = s.charAt(4);
System.out.println(c);//a
System.out.println((int)c);//97

indexOf 方法

找出一个字符在字符串中的位置:

indexOf() 1. 如果有重复,找出左侧第一个位置 2. 如果没有找到,返回-1

案例:

String s = "Tom and Jerry";
int i = s.indexOf('a'); 
System.out.println(i);//4
i = s.indexOf('r');
System.out.println(i);//10
i = s.indexOf('X');
System.out.println(i);//-1

str.indexOf("查找字符串", 起始位置)

String url = "http://tedu.cn/index.html";
int i = url.indexOf("/",7);
System.out.println(i);

lastIndexOf

反序查找:从右到左查找,返回字符的位置

String url = "http://tedu.cn/index.html";
int i = url.lastIndexOf("/");//14
System.out.println(i);//14
  1. 找到包 java.lang

  2. 找到类 String

  3. 找到方法 lastIndexOf()

substring 方法

从字符串中截取一部分作为子字符串

url.substring(起始位置)
//从起始位置开始到最后截取为子字符串

String url = "http://tedu.cn/index.html";
String filename = url.substring(15);
// filename = index.html

url.substring(起始位置, 结束位置)
//从起始位置开始到结束位置截取为子字符串
String url = "http://tedu.cn/index.html";
//            01234567890123456
// 包括起始不包括结束位置
String str = url.substring(7, 14);
String str = url.substring(7, 7+8);

trim

String str = " \t Tom \n \r";
String s = str.trim();

startsWith endsWith

检测一个字符串是否以指定字符串开头或结尾

String str = "Hello World!";
boolean b = str.startsWith("Hello");//true
b = str.startsWith("World");//false

b = str.endsWith("World");//false
b = str.endsWith("!");//true

案例:

String name = "demo.JPG";
if(name.toLowerCase().endsWith(".jpg")){
    System.out.println("图片文件");
}

StringBuilder

Java 提供的用于计算字符串的API, 其运算性能好:

案例:

String s = "A";
s = s + "1";
s = s + "1";
s = s + "1";
System.out.println(s);

原理:

技术分享图片技术分享图片

性能比较:

    String s = "A";
    long t1 = System.currentTimeMillis();
    for(int i=0; i<10000; i++){
        s = s+"1";
    }
    long t2 = System.currentTimeMillis();
    System.out.println(s.length());
    System.out.println(t2-t1);

    StringBuilder ss = 
        new StringBuilder("A");
    t1=System.nanoTime();
    for(int i=0; i<10000; i++){
        ss.append("1");
    }
    t2 = System.nanoTime();
    System.out.println(ss.length());
    System.out.println(t2-t1);


以上是关于JAVA中的String对象的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

有没有办法关闭代码片段中的命名建议?

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

Jsp获取Java的重定向赋值(String)

如何理解这段代码片段中的两对括号?

LockSupport.java 中的 FIFO 互斥代码片段