String
来源:互联网 发布:数据库内找账号密码 编辑:程序博客网 时间:2024/06/01 15:38
java—字符串(String)
String字符串是不可变的
a)、String类是一个final类,也即意味着String不能被继承,并且他的成员方法默认为final方法
b) 、String类通过char数组来保存字符串
注:String对象一旦创建就固定不变,除了赋值,对String对象的任何改变都不影响原对象,相关的change操作都会生成新的对象。
字符串常量池
每当我们创建字符串时JVM会首先检查字符串常量池,如果该字符串在字符串常量池中存在,就会直接返回常量池中的实例引用;如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中(即new创建相同字符串的String对象不会进入常量池)。
String的”==”与equals()比较值
由于存在字符串常量池String可用”==”进行值比较
String str1 = "equalss"; String str2 = "equalss"; String str3 = new String("equalss"); String str4 = new String("equalss"); //str1=str2 System.out.println((str1==str2)?"str1=str2":"str1!=str2"); //str1=str2 System.out.println((str1.equals(str2))?"str1=str2":"str1!=str2"); //str1!=str3 System.out.println((str1==str3)?"str1=str3":"str1!=str3"); //str1=str3 System.out.println((str1.equals(str3))?"str1=str3":"str1!=str3"); //str3!=str4 System.out.println((str3==str4)?"str3=str4":"str3!=str4"); //str3=str4 System.out.println((str3.equals(str4))?"str3=str4":"str3!=str4");
String的intern方法
- public String intern():返回字符串对象的规范化表示形式。
- 调用 intern 方法时:如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。
否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。 - 遵循对于任何两个字符串 str1 和 ste2,当且仅当 str1.equals(str2) 为 true 时,str1.intern() == str2.intern() 才为 true。
返回值:一个字符串,内容与此字符串相同,但它来自字符串池中。
String s1 = "ab";String str1 = new String("ab");String str2 = new String("ab");String s2 = "a"+"b";String s3 = "a";String s4 = "b";String s5 = s3+s4;System.out.println(s1.intern()==str1);//falseSystem.out.println(s1==s2);//trueSystem.out.println(s1==s2.intern());//trueSystem.out.println(str1.intern()==str2);//falseSystem.out.println(str1.intern()==str2.intern());//trueSystem.out.println(s5==s1);//falseSystem.out.println(s5.equals(s1));//true
采用new 创建的字符串对象不进入字符串池;字符串相加的时候,都是静态字符串的结果会添加到字符串池,如果其中含有变量(如s5中的s3和s4)则不会进入字符串池中。
String的一些API
a)、常用构造方法
- i. String string = new String();
- ii. String string1 = new String(char[] ch);
- iii. String string2 = new String(Strong str);
- iv. String string3 = new String(byte[] bytes,Charset charset);
String str1 = new String();String str2 = new String("Hello");char[] ch = {'H','e','l','l','o'}; String str3 = new String(ch);String string = new String(ch, 2, 3);
b)、常用的方法
- i. char charAt(int index):返回指定索引处的char值;
ii. String concat(String str):指定字符串连接到此字符串的结尾(也可以用”+”连接字符串);
String st = "Hello"; String str = "World"; String strr = st.concat(str); System.out.println(strr); System.out.println(st+str); System.out.println(strr.concat("!"));
iii. boolean contains(String str):当且仅当次字符串包含指定的string时返回true;
- iv. int length():返回字符串的长度;
- v. boolean equals(String str):判断内容是否相等;
- vi. String replace(String old,String new):替换;
vii. int indexOf(String str):搜索字符串出现第一次的索引值;
String str4 = "HelloWorld1";//indexOf()方法存在返回索引值,不存在返回-1System.out.println(str4);//指定字符在字符串第一次出现的索引System.out.println(str4.indexOf('W'));//指定字符从指定索引开始搜索第一次出现指定字符的索引System.out.println(str4.indexOf('o', 5));//指定字符串在此字符串中第一次出现的索引System.out.println(str4.indexOf("W"));//指定字符串从指定索引开始搜索在此字符串中第一次出现的索引System.out.println(str4.indexOf("lo", 5));
viii. boolean isEmpty():是否为空;
- ix. String[] split(String str):以参数分隔符,拆分字符串;
- x. int lastIndexOf(String str):最后一次出现的位置;
- xi. String substring(int i):切分字符串,从参数位置到最后;
- xii. String trim():忽略前后空白;
- xiii. boolean starsWith(String str):测试字符串是否以指定字符串作为前缀;
- xiv. boolean endsWith(String str):测试字符串是否以指定字符串作为尾部;
- xv. byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
- xvi. byte[] getBytes(Charset charset):使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组
xvii. byte[] getBytes(String charsetName):使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
String chinese = "你好,世界";byte[] by = chinese.getBytes();System.out.println(Arrays.toString(by));//utf-8编码得到byte[]byte[] by1 = chinese.getBytes("utf-8");System.out.println(Arrays.toString(by1));//utf-8解码by1构造新字符串String utfChinese = new String(by1,"utf-8");System.out.println(utfChinese);
- string
- String
- String
- string
- string
- String
- string
- String
- string
- string
- string
- string
- String
- String
- string
- string +
- String
- String
- 批量启动NIS服务
- interrupt、interrupted 、isInterrupted、InterruptedException
- UML建模之活动图介绍(Activity Diagram / 流程图)
- Oracle出现“java.sql.SQLException: 无法转换为内部表示”
- 网络协议
- String
- Java基础--jvm(内存区域与内存溢出异常--运行时数据区域)
- 3074
- 返回指定的字符串首次出现的位置
- 【面试】String创建时在内存中的方式
- sudo -i 也可以登录到root吗?
- SSCNet环境搭建
- [Introduction to Algorithms 学习笔记] 单源最短路径
- 机器学习中的数学(慢慢补充)