茂名网站建设推广,最便宜的免费建站,设计 网站 源码,如何查公司的工商注册信息String的特性
String底层源码 1、String声明为final#xff0c;不可被继承 2、String实现了Serializable接口#xff1a;表示字符支持序列化 实现了Comparable接口#xff1a;表示String可以比较大小 3、String内部定义了final char[] value用于存储字符串 4、通过字面量的…String的特性
String底层源码 1、String声明为final不可被继承 2、String实现了Serializable接口表示字符支持序列化 实现了Comparable接口表示String可以比较大小 3、String内部定义了final char[] value用于存储字符串 4、通过字面量的方式给一个字符串赋值此时的字符串值声明在字符串常量池中。 5、字符串常量池不会存储相同内容的字符串。 6、String代表不可变的字符序列。简称不可变性。 体现 1.当对字符串重新定内存区域赋值不能使用原有的value赋值。 2.当对现有的字符串连接操作时也需要重新指定内存区域赋值不能使用原有的value赋值。 3.当调用String的replace()修改字符或字符串时也需要重新指定内存区域赋值。 String的实例化对比
方式一通过字面量定义
String s1 abc;方式二通过new构造器
String s2 new String(abc);两种方式的区别
String s1 abc;
String s2 new String(abc);
System.out.println(s1 s2);//false解析 s1存储的是常量池中abc的地址值。 s2存储的是堆中String对象的地址值此对象存储的才是常量池中abc的地址值。 字符串对象是如何存储的
Person p1 new Person(Tom,12);
Person p2 new Person(Tom,12);System.out.println(p1.name p2.name);//true解析 通过字面定义的String都定义在常量池中p1,namep2.name地址值指向的是同一个name同一个地址所以是true。 Sting拼接操作对比
结论 1、常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。 2、只要其中一个是变量结果就在堆中。 3、如果拼接的结果调用inter()返回值就在常量池中。 String s1 abc;String s2 123;String s3 abc123;String s4 abc 123;String s5 s1 123;String s6 abc s2;String s7 s1 s2;System.out.println(s3 s4);//trueSystem.out.println(s3 s5);//falseSystem.out.println(s3 s6);//falseSystem.out.println(s3 s7);//falseSystem.out.println(s5 s6);//falseSystem.out.println(s5 s7);//falseSystem.out.println(s6 s7);//falseString s8 s5.intern();System.out.println(s3 s8);//truefinal String s9 abc;//final修饰此为常量。String s10 s9 123;System.out.println(s3 s10);//trueString的常用方法
int length()返回字符串的长度return value.lengthchar charAt(int index)返回索引处的字符return value[index]boolean isEmpty()判断是否是空字符串:return value.length 0String toLowerCase()使用默认语言环境将String中的所有字符转换为小写String toUpperCase()使用默认语言环境将String中的所有字符转换为大写String trim返回字符串的副本忽略前导空白和尾部空白String equals(Object obj)比较字符串内容是否相同boolean equalslgnoreCase(String anotherString)与equals方法类似忽略大小写String concat(String str)将指定字符串连接导此字符串的结尾。等价于用int compareTo(String anotherString)比较两个字符串的大小String substring(int beginIndex)返回一个新的字符串它是此字符串的从beginIndex开始截取到最后的一个子字符串String substring(int beginIndex,int endIndex)返回一个新字符串它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串boolean endsWith(String suffix)测试此字符串是否一指定的后缀结束boolean startsWith(String prefix)测试此字符串是否一指定的前缀开始boolean startsWith(String prefix,int toffset)测试此字符串从指定索引开始的子字符串是否一指定前缀开始boolean contains(CharSequence s)当且仅当此字符串包含指定的char值序列时返回trueint indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引int indexOf(String str,int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引从指定的索引开始int lastIndexOf(String str)返回指定子字符串中最右边出现处的索引int lastIndexOf(String str,int fromIndex)返回指定子字符串在此字符串中最后一次出现处的索引从指定的索引开始反向搜索String replace(char oldChar,char newChar)返回一个新的字符串它是通过用newChar替换此字符串中出现的所有oldChar得到的String replace(CharSequence target,CharSequence replacement)使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串String replaceAll(String regex,String replacement)使用给定的replacement 替换此字符串所有匹配给定的正则表达式的子字符串String replaceFirst(String regex,String replacement)使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串boolean matches(String regex)告知此字符串是否匹配给定的正则表达式String[] split(String regex)根据给定正则表达式的匹配拆分此字符串String[] split(String regex,int limit)根据匹配给定的正则表达式来拆分此字符串最多不超过limit个如果超过了剩下的全部都放到最后一个元素中
String与其他结构之间的转换
String与基本数据类型、包装类之间的转换
String——基本数据类型、包装类 调用包装类的静态方法parseXxx(str)
String str1 123;
int num Integer.parseInt(str1);基本数据类型、包装类——String 调用String重载的valueOf(xxx)
String str2 String.valueOf(num);String与char[]之间的转换
String——char[]: 调用String的toCharArray()
String str1 abc123;
char[] charArray str1.toCharArray();char[]——String: 调用String的构造器
char[] arr new arr[]{h,e,l,l,o};
String str2 new String(arr);String与byte[]之间的转换
String——byte[] (编码字符串–字节): 调用String的getBytes()
String str1 abc123中国;
byte[] bytes str1.getBytes();//使用默认字符即进行转换
System.out.println(Arrays.toString(bytes));
byte[] gbks str1.getBytes(gbk);//使用gbk字符集进行编码
System.out.println(Arrays.toString(gbks));byte[]——String(解码字节–字符串): 调用String构造器
String str2 new String (bytes);//使用默认字符集进行解码
System.out.println(str2);
String str3 new String(gbks);
System.out.println(str2);//出现乱码
//原因编码字符集时UTF-8解码字符集时GBK。编码解码需要相同。