房产网站建设网站推广,WordPress怎么批量上传图片,有没有网站可以做发虚拟币,wordpress插件选项概述
String 类代表字符串#xff0c;Java 程序中的所有字符串文字#xff08;例如“abc”#xff09;都被实现为此类的实例。也就是说#xff0c;Java 程序中所有的双引号字符串#xff0c;都是 String 类的对象。String 类在 java.lang 包下#xff0c;所以使用的时候…概述
String 类代表字符串Java 程序中的所有字符串文字例如“abc”都被实现为此类的实例。也就是说Java 程序中所有的双引号字符串都是 String 类的对象。String 类在 java.lang 包下所以使用的时候不需要导包
特点 字符串不可变它们的值在创建后不能被更改 虽然 String 的值是不可变的但是它们可以被共享 字符串效果上相当于字符数组( char[] )但是底层原理是字节数组( byte[] )
常用的构造方法
方法名说明public String()创建一个空白字符串对象不含有任何内容public String(char[] chs)根据字符数组的内容来创建字符串对象public String(byte[] bys)根据字节数组的内容来创建字符串对象String s “abc”;直接赋值的方式创建字符串对象内容就是abc public class StringTest {public static void main(String[] args) {//public String()创建一个空白字符串对象不含有任何内容String s1 new String();System.out.println(s1: s1);//public String(char[] chs)根据字符数组的内容来创建字符串对象char[] chs {a, b, c};String s2 new String(chs);System.out.println(s2: s2);//public String(byte[] bys)根据字节数组的内容来创建字符串对象byte[] bys {97, 98, 99};String s3 new String(bys);System.out.println(s3: s3);//String s “abc”; 直接赋值的方式创建字符串对象内容就是abcString s4 abc;System.out.println(s4: s4);}
}
创建字符串对象两种方式的区别
通过构造方法创建
通过 new 创建的字符串对象每一次 new 都会申请一个内存空间虽然内容相同但是地址值不同 直接赋值方式创建 以“”方式给出的字符串只要字符序列相同(顺序和大小写)无论在程序代码中出现几次JVM 都只会建立一个 String 对象并在字符串池中维护
号比较的到底是什么
基本数据类型 具体数据值
int a 10;
int b 20;
System.out.println(a b) //false
引用数据类型 地址值
String s1 new String(abc);
String s2 new String(abc);
System.out.println(s1 s2) //false
String s1 abc;
String s2 abc;
System.out.println(s1 s2) //true
equals方法的作用
equals()只能作用在引用数据类型无法作用在基本数据类型
equals()方法在不重写的情况下调用的是也就是比较两个对象的地址值是否一致但是很多类如String, Integer等都重写了equals方法以便按照对象的内容而不是内存地址进行比较。例如对于String类equals方法会比较两个字符串中的字符是否完全相同。如果重写后具体对比的含义根据重写规则而定 方法介绍
public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写
public class StringTest1 {public static void main(String[] args) {//构造方法的方式得到对象char[] chs {a, b, c};String s1 new String(chs);String s2 new String(chs);//直接赋值的方式得到对象String s3 abc;String s4 abc;//比较字符串对象地址是否相同System.out.println(s1 s2);System.out.println(s1 s3);System.out.println(s3 s4);System.out.println(--------);//比较字符串内容是否相同System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));System.out.println(s3.equals(s4));}
}//结果
false
false
true
--------
true
true
true
遍历字符串
public class StringTest2 {public static void main(String[] args) {//输入字符串并打印Scanner sc new Scanner(System.in);System.out.println(请输入一个字符串);String str sc.next();//遍历for(int i 0; i str.length(); i){//i 依次表示字符串的每一个索引char c str.charAt(i);System.out.println(c);}}
}
subString()
截取
String subString(int beginIndex,int endIndex)
包头不包尾,包左不包右.
只有返回值才是截取的小串
截取到末尾
String subString(int beginIndex)
注意点:只有返回值才是替换之后的结果
StringBuilder
StringBuilder可以看成是一个容器,创建后里面的内容是可变的
当我们在拼接字符串和反转字符串的时候会使用到
常用方法
append()
public StringBuilder append(任意类型)
reverse()
public StringBuilder reverse()
length()
public int length()
toString()
public String toString()
public class StringBuilderTest {public static void main(String[] args) {//1.创建对象StringBuilder sb new StringBuilder(abc);//2.添加元素sb.append(1);sb.append(2.3);sb.append(true);//反转sb.reverse();//获取长度int len sb.length();System.out.println(len);//打印//普及//因为StringBuilder是Java已经写好的类//java在底层对他做了一些特殊处理。//打印对象不是地址值而是属性值。System.out.println(sb);}
}
StringJoiner StringJoiner跟StringBuilder一样也可以看成是一个容器创建之后里面的内容是可变的。 作用提高字符串的操作效率代码编写简洁 JDK8出现的
基本使用
//1.创建一个对象并指定中间的间隔符号
StringJoiner sj new StringJoiner(---);
//2.添加元素
sj.add(aaa).add(bbb).add(ccc);
//3.打印结果
System.out.println(sj);//aaa---bbb---ccc
//1.创建对象
StringJoiner sj new StringJoiner(, ,[,]);
//2.添加元素
sj.add(aaa).add(bbb).add(ccc);
int len sj.length();
System.out.println(len);//15
//3.打印
System.out.println(sj);//[aaa, bbb, ccc]
String str sj.toString();
字符串拼接的底层原理
如果没有变量参与,都是字符串直接相加,编译后就是拼接之后的结果,会复用串池中的字符串
如果有变量参与,每一行拼接的代码,都是在内存中创建新的字符串,浪费内存
public class StringTest3 {public static void main(String[] args) {String s1 abc;//记录串池中的地址值String s2 abc;//复用串池中的字符串System.out.println(s1 s2);//true}
}
//在编译的时候,会将abc拼接成abc
打乱字符串
public class test7 {public static void main(String[] args) {//键盘输入任意字符串打乱里面的内容//1.键盘输入任意字符串String str abcdefg;//2.打乱里面的内容//修改字符串里面的内容//1.subString //2.变成字符数组char[] arr str.toCharArray();//[a,b,c,d,e,f,g]//3.打乱数组里面的内容//从0索引开始跟一个随机索引进行位置的交换//当数组里面的每一个元素都跟一个随机索引进行交换完毕之后那么内容就打乱了Random r new Random();for (int i 0; i arr.length; i) {int randomIndex r.nextInt(arr.length);//拿着随机索引指向的元素,跟i指向的元素进行交换char temp arr[i];arr[i] arr[randomIndex];arr[randomIndex] temp;}//4.把字符数组再变回字符串String result new String(arr);System.out.println(result);}
}