java中的String超详解结合代码简单易懂
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java中的String超详解结合代码简单易懂,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7553字,纯文字阅读大概需要11分钟。
内容图文
![java中的String超详解结合代码简单易懂](/upload/InfoBanner/zyjiaocheng/600/30185596998d427e9ca11a09a4bc3f6c.jpg)
String超详解
1.String是什么?
package string;
/*
java.lang.String;是字符串类型。
1.字符串一旦创建不可修改 “abc”字符串对象一旦创建不可能改变为“abcd”
2.提升字符串访问效率:在程序中使用缓存技术。所以在java中所有使用“”括起来的字符串都会在
“字符串常量池”中创建一份。字符串常量池在方法区中被储存
3.在程序执行过程中,如果程序用到某个字符串,例如“abc”,那么程序会在字符串常量池进行搜索,
如果没有找到则在字符串常量池中新建一个“abc”字符串,如果找到就直接拿过来用。【字符串常量池
是一个缓存区,为了提高访问字符串的效率】
*/
public class StringText01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个“abc”字符串对象,该对象的内存地址,让S1变量保存
//S1是一个引用,S1指向 “abc”对象
String S1 = "abc";
//可以重新指向别的对象,S1前没有final
//字符串“def”本身不可改变
S1 = "def";
String S2 = "hello";//在字符串常量池中新建一个"hello"字符串,该对象不可变
String S3 = "hello";//从字符串常量池中直接拿来用
System.out.println(S2==S3);//true
//比较两个字符串相等,不能用“==”
String s4 = new String("aaa");
String s5 = new String("aaa");
System.out.println(s4==s5);//false
//比较两个字符串是否一致,必须使用String类提供的equals方法
System.out.println(s4.equals(s5));//true
//以下程序执行结束后,会在字符串常量池中创建3个字符串对象
//所以一般情况不推荐使用+连接字符串,浪费空间
String s6 = "aaa";
String s7 = "bbb";
String S8 = s6+s7;
}
}
2.程序创建字符串对象的区别
package string;
/*
分析以下程序创建字符串对象的区别
(1)s1只会在字符串常量池中创建一个字符串对象
(2)s2会在字符创常量池中创建一个字符串对象,并且会在堆中在创建一个字符串对象
第二种方式比较浪费内存,常用的是第一种方式
*/
public class StringText02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "abc";//创建了一个对象
String s2 = new String("abc");//创建了两个对象
}
}
3.使用String时我们应该注意的问题
package string;
/*
使用String时我们应该注意的问题:尽量不要频繁的做字符串的拼接操作,
字符串一旦创建不可改变,只要频繁创建就会在字符串常量池中创建大量的
字符串对象,给垃圾回收带来问题。
*/
public class StringText04 {
public static void main(String[] args) {
String[] ins = {"sport","music","food","sleep"};
//要求将上面的兴趣爱好拼接成一个字符串"sport,music,food,sleep"
String str=new String();
for(int i=0;i<ins.length;i++) {
if(i==ins.length-1)
str+=ins[i];
else
str+=ins[i]+",";
}
//str+=ins[ins.length-1];//使用判断语句来编写程序更直观
System.out.println(str);
}
}
4.关于字符串常用构造方法
package string;
/*
关于字符串常用构造方法
*/
public class StringText05_Create {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.
String s1 = "ahc";
//2.
String s2 = new String("ahc");
//3.
byte[] bytes = {97,98,99,100};
String s3 = new String(bytes);
System.out.println(s3);//abcd String已经重写了Object中的toString
//4.
String s4 = new String(bytes,0,2);//(目标对象,偏移量,长度)
System.out.println(s4);//ab
//5.
char[] c1 = {'我','是','人'};
String s5 = new String(c1);
System.out.println(s5);//我是人
//6.
String s6 = new String(c1,1,2);
System.out.println(s6);//是人
}
}
5.字符串中常用的方法
package string;
/*
字符串中常用的方法
*/
public class StringText06_Method {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.char charAt(int index);//返回指定索引处的char值
char c1 = "abcdef".charAt(2);
System.out.println(c1);//c
//2.boolean endsWith(string endStr);//测试此字符串是否以指定的后缀结束
System.out.println("HelloWord.java".endsWith(".java"));//true
//3.boolean equalsIgnoreCase(String anotherString);//比较两个字符串不考虑大小写
System.out.println("abc".equalsIgnoreCase("AbC"));//true
//4.byte[] getBytes();//使用平台默认字符集将字符串转换为byte数组
byte[] bytes = "abc".getBytes();
for(byte i:bytes) {
System.out.print(i+" ");
}System.out.println();
//5.int hashCode();//返回字符串的哈希码
System.out.println("abcdx".hashCode());//92599414
//6.int indexOf(String str)//返回指定子字符串在此字符串中第一次出现位置的索引
System.out.println("http://192.168.1.100:8080/oa/login/action?username=syh&pwd=123".indexOf("/oa"));//25
//7.int indexOf(String str,int formIndex)//返回指定子字符串在此字符串中第一次出现位置的索引,从指定的索引开始搜索
System.out.println("javaoraclec++javab".indexOf("java", 1));//13
//8.int lastIndexOf(String str)//返回指定子字符串在此字符串中最右边出现的索引
System.out.println("javaoraclec++javab".lastIndexOf("java"));//13
//9.int lastIndexOf(String str,int formIndex)//返回指定子字符串在此字符串中第一次出现位置的索引,从指定的索引开始反向搜索
System.out.println("javaoraclec++javab".lastIndexOf("java", 14));//13
//10.int length();//返回此字符串的长度
System.out.println("javaoraclec++javab".length());//18
//11.String replaceAll(String regex,String replacement);//使用给定的replacement替换此字符串中所有匹配给定的正则表达式的子字符串
System.out.println("javaoraclec++javab".replaceAll("java", "mysql"));//mysqloraclec++mysqlb
//12.String[] split(String s);//根据给定正则表达式的匹配拆分此字符串
String myTime = "2008,08,08";
String[] ymd = myTime.split(",");
for(String str:ymd)
System.out.print(str+" ");
System.out.println();
//13.boolean startWith(String prefix);//测试此字符串是否以指定的前缀开始
System.out.println("/system/login.action".startsWith("/"));//true
//14.String substring(int beginIndex)//返回一个新的字符串,它是此字符串的一个子字符串
System.out.println("/oa/login.action".substring(3));///login.action
//15.String substring(int beginIndex,int endIndex)//返回一个新的字符串,它是此字符串的一个子字符串
System.out.println("/oa/login.action".substring(4,9));//login
//16.char[] toCharArray();//将此字符串转换为新的字符数组
char[] c2 = "我是中国人,我爱我的祖国".toCharArray();
for(char i:c2)
System.out.print(i+" ");
System.out.println();
//17.String toUpperCase();//将字符串中的所有字符转换为大写
System.out.println("AbCDefG".toUpperCase());
//18.String toLowerCase();//将字符串中的所有字符转换为小写
System.out.println("AbCDefG".toLowerCase());
//19.Sting trim();//去除前段和末尾的空白
System.out.println(" im Ironman ".trim());
//20.static String valueOf(Object obj)//将目标对象转换为字符串
Object o = null;
System.out.println(o);//null
System.out.println(String.valueOf(o));//null,同前一行,该函数对空值(null)进行了处理
//System.out.println(o.toString());//空指针异常
}
}
6.StringBuffer和StringBuilder
package string;
/*
java.lang.StringBuffer;
java.lang.StringBuilder;
1.StringBuffer和StringBuilder是什么?
是一个字符串缓冲区。
2.工作原理
预先在内存中申请一块空间,以容纳字符序列,
如果预留的空间不够用,则进行自动扩容,以容
纳更多字符序列。
3.String和StringBuffer,StringBuilder最大的区别?
String是不可变的字符序列,存储在字符常量池中
StringBuffer底层是一个char数组,但是该char数组是可变的,
并且可以自动扩容。
4.StringBuffer和StringBuilder的默认初始化容量是16。
5.如何优化StringBuffer和StringBuilder?
最好在创建StringBuffer之前,预测StringBuffer的存储字符数量,
然后再创建StringBuffer的时候采用指定初始化容量的方式创建StringBuffer,
为了减少底层数组的拷贝,提高效率。
6.StringBuffer和StringBuilder的区别?
StringBuffer是线程安全的(可以在多线程的环境下使用)
StringBuilder是非线程安全的(在多线程环境下使用可能出现问题)
*/
public class StringText08_StringBuffer_StringBuilder {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();//16
//可以向StringBuffer中追加字符串
String[] ins = {"体育","音乐","睡觉","美食"};
//推荐字符串频繁拼接使用StringBuffer或者StringBuilder
for(int i=0;i<ins.length;i++) {
if(i==ins.length-1) {
sb.append(ins[i]);
}
else {
sb.append(ins[i]);
sb.append(",");
}
}
System.out.println(String.valueOf(sb));
}
}
内容总结
以上是互联网集市为您收集整理的java中的String超详解结合代码简单易懂全部内容,希望文章能够帮你解决java中的String超详解结合代码简单易懂所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。