欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

3.2常用类(java学习笔记)String与StringBuffer

程序员文章站 2022-12-29 14:53:44
一、String String又称不可变字符序列。 我们看JDK源码中用于字符存储的数组有final修饰,final修饰变量就代表变量不能改变。 我们可以看API文档中对String的描述。 String 代表字符序列。在java程序中所有的字符串字面量,如“abc”实现实例都属于这个类。 Stri ......

一、string

string又称不可变字符序列。

3.2常用类(java学习笔记)String与StringBuffer

我们看jdk源码中用于字符存储的数组有final修饰,final修饰变量就代表变量不能改变。

我们可以看api文档中对string的描述。

 

3.2常用类(java学习笔记)String与StringBuffer

3.2常用类(java学习笔记)String与StringBuffer

 

string 代表字符序列。在java程序中所有的字符串字面量,如“abc”实现实例都属于这个类。

string是不可改变的;它的values不能在创建之后改变。string buffers是支持可变的字符串。因为string对象是

不可变的它们能共享。

 

1.string实例化方法

public class test {
    public static void main(string[] args) {
        string str1 = "abc";              //实例化方法1
        string str2 = new string("efg");   //实例化方法2
        
        system.out.println(str1);
        system.out.println(str2);
    }    
}
运行结果:
abc
efg

这两种实例化方法都可以,具体区别后面会有补充。

 

2.字符串的比较

public class test {
    public static void main(string[] args) {
        string str1 = "abc";
        string str2 = new string("abc");
        
        system.out.println(str1 == str2);
        system.out.println(str2.equals(str1));
    }    
}
运行结果:
false
true

首先第一个==比较比较的是对象的地址值,这里str1和str2是两个地址,所以直接比较地址会是false。

而str2.equals(str1)是比较字符串的内容是否相等。

str1和str2的内容虽然一样,但它们是两个对象,各自存储一个abc。所以直接比较对象地址会是false。

 

我们再来看下列代码

public class test {
    public static void main(string[] args) {
        string str1 = "abc";
        string str2 = new string("abc");
        string str3 = "abc";
        
        system.out.println(str1 == str2);
        system.out.println(str1 == str3);
        system.out.println(str2.equals(str1));
    }    
}
运行结果:
false
true
true

我们会发现,str1和str2直接比较是false,但是str1和str3直接比较是false。

这就说下之前说的到两种构造方法的区别,string str1 = “abc”;这种构造方法,当指向的内容一致时,两个实例会指向相同的地址,而不会重新创建实例。

string str2 = new string("abc");这种方法无论内容相同与否都会重新创建一个新的实例。

3.2常用类(java学习笔记)String与StringBuffer

3.字符串内容不可变

一开始就说了string又称为不可变字符序列。

我们看下列代码:

public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        string str2 = "world";

        str2 = str1 + str2;        
        
        system.out.println(str1);
        system.out.println(str2);
    }    
}
运行结果:
holle
holleworld

看到这段代码,大家可能会有疑问,这str2变了呀,变成了holle world.

其实变的是str2指向的地址值,内容并没有改变。

3.2常用类(java学习笔记)String与StringBuffer

只是断开了原有指向,重新指向新的地址。

 

由于string的不可变特性,要避免一下代码:

public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        for(int i = 0; i < 100; i++){
            str1 = str1 + i;    //由于string是不可变的,所以会不停指向新的地址。
        }
        system.out.println(str1);
    }    
}

 

4.strign常用方法

 

4.1 charat(int index)

获取字符串中指定下标的字符。

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        char ch;
        ch = str1.charat(1);
    
        system.out.println(ch);
    }    
}
test_charat
3.2常用类(java学习笔记)String与StringBuffer
运行接过:
o
运行结果

 

4.2 indexof(string str)

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        int i;
        i = str1.indexof("le");
    
        system.out.println(i);
    }    
}
test_indexof
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
3
运行结果

 

4.3 substring(int start, int end)

截取指定开始位和结束位前一位之间的字符串。

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        
        system.out.println(str1.substring(2, 4));
    }    
}
test_substring
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
ll
运行结果

 

4.4 touppercase();

将字符串变为大写

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        
        system.out.println(str1.touppercase());
    }    
}
test_uppercase
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
holle
运行结果

 

还有很多方法就不一一介绍了,jdk里面的源码和文档有详细的说明。

 

二、stringbuffer

stringbuffer是线程安全、可变的字符序列。线程安全也就意味着效率较低。

 

stringbuffer基本操作方法。

public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        stringbuffer b1 = new stringbuffer("abc");
        stringbuffer b2 = new stringbuffer("def");
        stringbuffer b3 = new stringbuffer("gh");
        
        system.out.println(b1.append(b2).append(b3));
    }    
}
运行结果:
abcdefgh

stringbuffer不能向string那样使用+连接,必须是用连接函数append()来连接。

连接后不是像string那样指向新的地址,而是将b2和b3的内容追加到b1里面。(因为b1是可变的字符序列,故可以对其进行修改增加)

 

append()的功能非常强大可以连接很多东西(即将很多类型写到原有字符串里面)。这个大家可看下jdk的源码。

3.2常用类(java学习笔记)String与StringBuffer

当前数组长度不够时,stringbuffer会自动扩大当前数组长度。

不会像string那样直接创建新的。

 

stringbuffer是可变的字符序列,主要特性是可变可修改的。

它的很多方法与string类似,下面举几个例子。

1.indexof(string str)

查找指定字符串所在下标

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        stringbuffer b1 = new stringbuffer("hello");

        system.out.println(b1.indexof("ll"));        
    }    
}
test_indexof
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
2
运行结果:

2.insert(in toffset, string str)

在指定位置加上指定字符串。

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        stringbuffer b1 = new stringbuffer("hello");

        system.out.println(b1.insert(2,".."));        
    }    
}
test_insert
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
he..llo
运行结果

3.revers()

将内容反转。

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        stringbuffer b1 = new stringbuffer("hello");

        system.out.println(b1.reverse());        
    }    
}
test_reverse
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
olleh
运行结果

4.delete(int start, int end)

删除指定范围的内容

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        stringbuffer b1 = new stringbuffer("hello");

        system.out.println(b1.delete(2,4));        
    }    
}
test_delete
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
heo
运行结果

5.substring(int start int end);

截取指定范围的字符串

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1 = "holle";
        stringbuffer b1 = new stringbuffer("hello");

        system.out.println(b1.substring(2,4));        
    }    
}
test_substring
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
ll
运行结果

6.tostring()

将内容转换为string类型。

3.2常用类(java学习笔记)String与StringBuffer
public class test {
    public static void main(string[] args) {
        string str1;
        stringbuffer b1 = new stringbuffer("hello");
        str1 = b1.tostring();
        system.out.println(str1 + "");        
    }    
}
test_tostring
3.2常用类(java学习笔记)String与StringBuffer
运行结果:
hello
运行结果

还有很多方法这里只是举几个例子,有兴趣深入了解可以去查看jdk源码或api文档。

 

上一篇: C#基本数据类型

下一篇: C#數據庫