实例化String对象
//直接赋值
String name="张三";
//调用String类中的构造方法
//在此类中有public String(String original){}
String name=new String("张三");
两种实例化方式的区别
String str1="abc";
String str2="abc";
String str3="abc";
String str4="abc";
这种实例化在栈中创建了多个引用,在堆中创建了一个内容块,多个引用指向同一个内容块。
这是因为java会提供一个字符串池来保存全部的内容,在java中称为共享设计,在java中形成一个对象池,在这个对象池中,新实例化的对象如果已经在池中定义了,则不再重新定义,而从池中直接取出使用。
String str="abc";
String str=new String("abc");
使用new关键字,不管如何都会再开辟一个新的空间。
字符串内容不可改变
String str="ni";
str+="hao";
String内容比较
//基本类型内容比较 ==
int x=1;
int x1=2;
System.out.println(x==x1);
但是对于字符串内容不行,字符串是通过引用存放到堆中的,使用==只能比较的是引用自己的地址,而不是引用对应地址的内容;
所以有如下:
//equals()字符串比较
String str1="hello";
String str2=new String("hello");//通过new赋值 开辟一块新的堆内存,
String str3=str2;//与str2指向同一块堆内存
System.out.println(str1==str2);//内容相同 但表示内容的地址的数值不同 false
System.out.println(str1==str3);//地址不同 false
System.out.println(str2==str3);//指向同一空间,表示内容的地址的数值相同同 false
//equals 只对堆中存的内容进行比较不考虑地址的数值
System.out.println(str1.equals(str2));//true
System.out.println(str1.equals(str3));//true
System.out.println(str2.equals(str3));//true
String类中常用方法
String string1="hel.lo world str,ing args";
System.out.println(string1.length());
System.out.println(string1.charAt(4));
//提取字串
System.out.println(string1.substring(4,10));
System.out.println(string1.substring(4));
//拆分 把字符串根据某些符号拆分成子串
String[] strings=string1.split(" ");//存放在字符串数组里面
for (int i =0;i<strings.length;i++){
System.out.print(strings[i]+" -- ");
}
System.out.println();
//合并
System.out.println(string1.concat("nihao"));
//转换成字符数组
char[] chars=string1.toCharArray();
for (int i =0;i<chars.length;i++){
System.out.print(chars[i]+" -- ");
}
//字符数组转换成字符串
String string2=new String(chars);//构造方法
System.out.println(string2);
String string3="We are happy!";
//替换 用%20替换空格
System.out.println(string3.replaceAll(" ","%20"));
System.out.println(string3.replaceAll("We","you"));
//把其他数据类型转化成字符串
System.out.println(String.valueOf(20));
//根据字符返回索引位置
System.out.println(string3.indexOf(' ',1));//只返回检索到的第一个此字符的索引后面的不管
//去除字符串前后空格
String string4=" dfTThjk ";
System.out.println(string4.trim());
//字符串改成大小写
System.out.println(string4.toUpperCase());
System.out.println(string4.toLowerCase());
//把字符串返回成字节数组
byte[]bytes=string4.getBytes();
System.out.println(new String(bytes));
//判断是否以指定的字符串开头或结尾
String s1="**hello";
String s2="hello**";
if (s1.startsWith("**"))
System.out.println(s1);
if (s2.endsWith("**"))
System.out.println(s2);
//不区分大小写进行字符串比较
s1="hello";
s2="HELLO";
System.out.println(s1.equalsIgnoreCase(s2));