JAVA中关于String的一些知识.

  • Post author:
  • Post category:java







欢迎各位热爱JAVA的朋友进来,这次写了一些在JAVA中String的一些知识,有不足向我指正鸭!






共有三部分:





String的一些基本知识



String类中常用的方法





StringBuilder和StringBuffer



String的一些基本知识

1.String s1=”abc”

s1中保存的不是“abc”字符串

s1中保存的是“abc”字符串的内存地址

“abc”保存在字符串常量池中,字符串常量池位于JVM中的方法区

2.引用数据类型String也会在方法去生成String.class字节码文件

3.垃圾回收器是不会回收字符串常量池等常量的。

4.String类已经重写了equals方法,以下的equals方法调用的是String重写之后的equals方法

5.关于String类中的构造方法

第一个:String s=new String(“”);

第二个:String s=””;最常用

第三个:String s=new String(char数组);

第四个:String s=new String(char数组,起始下标,长度);

第五个:String s=new String(byte数组);

第六个:String s=new String(byte数组,起始下标,长度);

例子:(1)byte[] bytes={97,98,99};

String s2=new String(bytes);

System.out.println(s2);//abc

(2)byte[] bytes={97,98,99};

String s3=new String(bytes,1,2);

System.out.println(s3);//bc




String类中常用的方法



(1)char型 charAt(int index)

char c=“中国人”.charAt(1);

System.out.println(c);//输出 国

(2)int型 compareTo(String anotherString)//按字典来比较

int result =”abc”.compareTo(“abc”);

System.out.println(result);//0(等于0)前后一致

int result2=”abcd”.compareTo(“abce”);

System.out.println(result2);//-1(小于0)前小后大

int result3=”abce”.compareTo(“abcd”);

System.out.println(result3);//1(大于0)前大后小

System.out.println(“xyz”.compareTo(“zyx”));//-1拿着字符串第一个字母和后面字符串的第一个字母比较,能分胜负就不再比较了

字符串之间比较大小不能直接使用><,需要使用compareTo方法

(3)boolean型 contains(CharSequence s)

判断前面的字符串中是否包含后面的字符串

System.out.println(“hello.java”.contains(“.java”));//true

(4)boolean型 endsWith(String suffix)

判断当前字符串是否以某个字符串结尾

System.out.println(“sss.txt”.endsWith(“.java”));//false

(5)boolean型 equalsIgnoreCase(String anotherString)

判断两个字符串是否相等,并且同时忽略大小写

System.out.println(“ABC”.equalsIgnoreCase(“abC”));//true

(6)boolean equals(Object anObject)

比较两个字符串必须使用equals方法,不能使用==

System.out.println(“abc”.equals(“abc”));//true

(7)byte[]型 getBytes();

将字符串对象转换成字节数组

byte[] s=”abcde”.getBytes();

for(int i=0;i<s.length;i++){


System.out.println(s[i]);

}

(8)int型 indexOf(String str)

判断某个子字符串在当前字符串中第一次出现处的索引(下标)

System.out.println(“oraclejavatrvc.ccdg”.indexOf(“java”));//6

(9)boolean型 isEmpty()

判断某个字符串是否为“空字符串”。底层源代码调用的应该是字符串的length()方法。

String s=””;

System.out.println(s.isEmpty());//true

(10)int型 length()

面试题:判断数组长度和判断字符串长度不一样

判断数组长度是length属性,判断字符串长度是length()方法

System.out.println(“abc”.length());//3

(11)int型 lastIndexOf(String str)

判断某个字符串在当前字符串中最后一次出现的索引(下标)

System.out.println(“shgdwjavassjava”);//11

(12)String型 replace(target,replacement)

替换

String得到父接口就是CharSequence

String s=”Wangfeixiang”;

System.out.println(s.replace(“Wang”,”Xu”));//Xufeixiang

(13)String[]型 split(String regex)

//拆分字符串

String s=”2002-10-01″;

String[] m=s.split(“-“);

for(int i=0;i<m.length;i++){


System.out.println(m[i]);

}//2002 10 01

(14)boolean型 startsWith(String prefix)

//判断某个字符串是否以某个字符串开始

System.out.println(“http://www.vvv.com”.startWith(“https”));//false

(15)String型 substring(int buginIndex)参数是起始下标

//截取字符串

System.out.println(“http://www.baidu.com”.substring(7));//www.baidu.com

(16)String型 substring(int beginIndex,int endIndex)

beginIndex起始位置(包括)

endIndex结束位置(不包括)

System.out.println(“http://www.baidu.com”.substring(7,10));//www

(17)char[]型 toCharArray()

//将字符串转换成char数组

char[] chars=”我是中国人”.toCharArray();

for循环…….

(18)String型 toLowerCase();

//转换为小写

System.out.println(“AFDWDSsaedDWS”.toLowerArray());

(19)String型 toUpperCase();

//转换为大写

(20)String型 trim()

//去除字符串前后空白

String s=”     hello  hello    “;

System.out.println(s.trim());//hello  hello

(21)String型 String.valueOf();

//将非字符串转换成字符串

String中只有一个方法是静态的,不需要new对象

String s1=String.valueOf(3.14);

!!!!!!!!本质上System.out.println()这个方法在输出任何数据的时候都是先转换成字符串再输出

println()先调用String.valueOf()方法然后valueOf()再调用toString()

所以输出的任何内容本质上都是字符串




StringBuilder和StringBuffer



1.StringBuffer底层实际上是一个byte[]数组,往StringBuffer中放字符串,实际上是放到byte数组当中了,StringBuffer的初始化容量是16

2.拼接字符串,调用append()方法

append()方法底层在进行追加的时候,如果byte数组满了,会自动扩容

3.如何优化StringBuffer的性能?

在创建StringBuffer的时候尽可能给定一个初始化容量,最好减少底层数组得到扩容次数。预估计一下,给一个大一些初始化容量

4.StringBuffer和StringBuilder区别:StringBuffer中的方法都有synchronized关键字修饰,表示StringBuffer在多线程环境下运行时安全的

StringBuilder中的方法都没有synchronized关键字修饰,表示StringBuilder在多线程环境下运行是不安全的

StringBuffer是线程安全的

StringBuilder是非线程安全的(涉及到多线程)



好了,就到这里啦!感谢大家观看哈哈!栓Q~



以后我会更新一些关于JAVA的一些知识!中间会有




计算机网络





计算机组成原理





数据结构与算法





mysql


的知识很全哦~



谢谢大家!!!



共同进步鸭!




版权声明:本文为m0_74195366原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。