菜鸟笔记
提升您的技术认知

java string类(超详细!)-ag真人游戏

1、string表示字符串类型,属于 引用数据类型,不属于基本数据类型。

2、在java中随便使用 双引号括起来 的都是string对象。

例如:“abc”,“def”,“hello world!”,这是3个string对象。

3、java中规定,双引号括起来的字符串,是 不可变 的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也不能变成"ab"

4、在jdk当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。

5、为什么sun公司把字符串存储在一个“字符串常量池”当中呢?

因为字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。

eg1.

public class stringtest01 {
  
    public static void main(string[] args) {
  
        // 这两行代码表示底层创建了3个字符串对象,都在字符串常量池当中。
        string s1 = "abcdef";
        string s2 = "abcdef"   "xy";
        // 分析:这是使用new的方式创建的字符串对象。这个代码中的"xy"是从哪里来的?
        // 凡是双引号括起来的都在字符串常量池中有一份。
        // new对象的时候一定在堆内存当中开辟空间。
        string s3 = new string("xy");
    }
}


eg2.

public class stringtest02 {
  
    public static void main(string[] args) {
  
        string s1 = "hello";
        // "hello"是存储在方法区的字符串常量池当中
        // 所以这个"hello"不会新建。(因为这个对象已经存在了!)
        string s2 = "hello";
        
        // == 双等号比较的是变量中保存的内存地址
        system.out.println(s1 == s2); // true
        string x = new string("xyz");
        string y = new string("xyz");
        
        // == 双等号比较的是变量中保存的内存地址
        system.out.println(x == y); //false
    }
}

注意:
字符串对象之间的比较不能使用“== ”,"=="不保险。应该调用string类的equals方法。

eg3.

string k = new string("teststring");
//string k = null;
// "teststring"这个字符串可以后面加"."呢?
// 因为"teststring"是一个string字符串对象。只要是对象都能调用方法。
system.out.println("teststring".equals(k)); // 建议使用这种方式,因为这个可以避免空指针异常。
system.out.println(k.equals("teststring")); // 存在空指针异常的风险。不建议这样写。
构造方法名 eg.
string s = “xxx” 最常用
string(string original) string(“xxx”)
string(char数组)
string(char数组,起始下标,长度)
string(byte数组)
string(byte数组,起始下标,长度)
string(stringbuffer buffer)
string(stringbuilder builder)

eg.

class stringtest{
  
    public static void main(string[] args) {
  
    	//最常用的方式
        string s1 = "我是中国人";
        system.out.println(s1);//我是中果人
        string s2 = new string("我是中国人");
        system.out.println(s2);//我是中果人
        char[] c = {
  '我' , '是', '中', '果', '人'};
        string s3 = new string(c);
        system.out.println(s3);//我是中果人
        string s4 = new string(c, 2, 3);
        system.out.println(s4);//中果人
        byte[] b = {
  65, 66 ,67, 68};
        string s5 = new string(b);
        system.out.println(s5);//abcd
        string s6 = new string(b, 1, 2);
        system.out.println(s6);//bc
        stringbuffer sb1 = new stringbuffer("我是福建人");
        string s7 = new string(sb1);
        system.out.println(s7);//我是福建人
        stringbuilder sb2 = new stringbuilder("我是厦门人");
        string s8 = new string(sb2);
        system.out.println(s8);//我是厦门人
    }
}
方法名 作用
char charat(int index) 返回指定位置的字符
int compareto(string anotherstring) 比较两个字符串。相等返回0;前大后小返回1;前小后大返回-1
boolean contains(charsequence s) 判断字符串是否包含s
boolean endswith(string suffix) 判断字符串是否以suffix结尾
boolean equals(object anobject) 判断两个串是否相等
boolean equalsignorecase(string anotherstring) 忽略大小写判断两个串是否相等
byte[] getbytes() 将字符串串变成字节数组返回
int indexof(string str) 返回str在字符串第一次出现的位置
boolean isempty() 字符串是否为空
int length() 字符串长度
int lastindexof(string str) 返回str最后一次出现的位置
string replace(charsequence target, charsequence replacement) 用replacement替换字符串target的字符
string[] split(string regex) 将字符串以regex分割
boolean startswith(string prefix) 判断字符串是否以prefix开始
string substring(int beginindex) 从beginindex开始截取字串
string substring(int beginindex, int endindex) 截取beginindex到endindex - 1的字符串
char[] tochararray() 将字符串转换乘char数组
string tolowercase() 字符串转小写
string touppercase() 字符串转大写
string trim() 去除字符串两边空格
静态方法
static string valueof(int i) 将 i 转换成字符串

eg.

class stringtest{
  
    public static void main(string[] args) {
  
        string s1 = "hello world";
        system.out.println(s1.charat(6));//w
        string s2 = "abc";
        string s3 = "xyz";
        string s4 = "xyz";
        system.out.println(s2.compareto(s3));//-23
        system.out.println(s3.compareto(s4));//0
        system.out.println(s4.compareto(s1));//16
        system.out.println(s2.equals(s3));//false
        system.out.println(s1.endswith("world"));//true
        system.out.println(s1.endswith("t"));//false
        string s5 = "hello world";
        system.out.println(s1.equalsignorecase(s5));//true
        byte[] b = s1.getbytes();
        system.out.println(arrays.tostring(b));//[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
        system.out.println(s1.indexof("world"));//6
        system.out.println(s1.indexof("h"));//0
        system.out.println(s1.isempty());//false
        system.out.println(s1.length());//11
        string s6 = "javapythonc  cphpjavapython";
        system.out.println(s6.lastindexof("java"));//17
        system.out.println(s6.lastindexof("h"));//24
        string s7 = "name=zhangsan&age=18&sex=男";
        string news7 = s7.replace("&", ";");
        system.out.println(news7);//name=zhangsan;age=18;sex=男
        string[] splits7 = s7.split("&");
        system.out.println(arrays.tostring(splits7));//[name=zhangsan, age=18, sex=男]
        system.out.println(s6.startswith("java"));//true
        system.out.println(s6.startswith("python"));//false
        system.out.println(s6.substring(10));//c  cphpjavapython
        system.out.println(s6.substring(10, 13));//c  
        char[] chars6 = s6.tochararray();
        system.out.println(arrays.tostring(chars6));//[j, a, v, a, p, y, t, h, o, n, c,  ,  , c, p, h, p, j, a, v, a, p, y, t, h, o, n]
        system.out.println(s6.touppercase());//javapythonc  cphpjavapython
        system.out.println(s5.tolowercase());//hello world
        string s8 = "           你 好 世 界                   ";
        system.out.println(s8.trim());//你 好 世 界
        system.out.println("------------------------------");
        system.out.println(string.valueof(123));//123
        system.out.println(string.valueof(3.14));//3.14
        system.out.println(string.valueof(true));//true
        system.out.println(string.valueof(new object()));//java.lang.object@4554617c
        //valueof会自动调用tostring()方法
    }
}

注意:
1.为什么 system.out.println(引用) 会自动调用tostring()方法?

因为println()会调用string.valueof()方法而string.valueof()会调用tostring()方法

2.string byte数组 理解

byte[] b = new byte[1000000000];//有1000000000都是byte类型的

网站地图