String的美妙之处
1:如何创建一个字符串?
方式一:
String str = "Hello Bit";
方式二
String str2 = new String("Hello Bit");
方式三
char[] array={'a','b','c'};
String str=new String(array);
2: String是一个引用类型;
所以对于以下代码:
String str1 = "Hello";
String str2 = str1;
内存图如下
注意 String类型的不会改变,所谓的改变也不过是是它的引用指向了另一个字符串。
3:字符串比较相等:有“==”和equals方法。
String 使用 == 比较并不是在 比较字符串内容 而是比较两个引用是否是指向同一个对象.
而equals方法比较的是内容是否相等。
String str = new String("hello");
内存图如下:
public static void main(String[] args) {
String str1=new String("hello");
String str2="hello";
System.out.println(str1==str2);
}
输出结果为false
但是可以用intern()方法手动入池;
public static void main(String[] args) {
String str1=new String("hello").intern();
String str2="hello";
System.out.println(str1==str2);
}
结果就是true
字符串是不可改变的,如果想要改变,可以借助原字符串,创建新的字符串,反射也可以。
这是一些常用的放法
任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指 向而已。
通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和 StringBuilder类。 StringBuffer 和 StringBuilder 大部分功能是相同的,我们课件上主要介绍 StringBuffer
在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为append()方法:
下面是我写的一个字符串反转
public class TestString {
public static String[] func(String[]strings){
int left=0;
int right=strings.length-1;
while(left<right){
String tmp=strings[left];
strings[left]=strings[right];
strings[right]=tmp;
left++;
right--;
}
return strings;
}
public static void display(String[]strings){
for(int i=0;i<strings.length;i++){
System.out.print(strings[i]+" ");
}
}
public static void main(String[] args) {
String string="i am student";
String[] strings=(string.split(" "));//使用split方法使字符串变为
String[]strings1=func(strings);
display(strings1);
}
}
下面是一个利用StringBuffer写的一个从头开始不重复的最长子串
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
String str=sc.nextLine();
StringBuffer stringBuffer=new StringBuffer();
for(int i=0;i<str.length();i++){
char tmp=str.charAt(i);
if(!stringBuffer.toString().contains(tmp+"")){
stringBuffer.append(tmp);
}
}
System.out.println(stringBuffer.toString());
}
}
关于字符串就先说到这里了,