String的一些总结

内容有string的面试题,string的操作,string的升级类

最常见的笔试题:

1,比较是否相等
               String str1 = "hello";
		String str2 = new String("hello");
		String str3 = str2;
System.out.println(str1==str2);System.out.println(str3==str2);System.out.println(str3==str1);

问输出的结果
答案是 false true false
解释一下其中的原因:
String str1 = "hello"; 是将一个字符串的堆空间的地址给str,此时的代码中,只在堆内存中开辟了一块空间
String str2 = new String("hello"); 使用构造方法进行对象实例化的时候,由于内部的字符串属于匿名对象的原因,所以将产生两块堆内存空间,其中 有一块将成为垃圾

string的操作:

public class String_do {
     //转换,去除空格,比较  
    public static void method_7(){  
        String s="Hello Java";  
        sop("原字符串为:"+s);  
        sop(s.toUpperCase());  //转换成大写
        sop(s.toLowerCase());  //转换成小写
        sop(s.trim());  //去空格
        //s.toUpperCase();
         
    }  
    //子串         获取字符串中的一部分  
    public static void method_sub(){  
        String s="abcdefghijklmnopqrstuvwxyz";  
        sop("原字符串为");  
        sop(s);  
        String s1=s.substring(9); //从指定位置到结尾。如果角标不存在,则会出现字符串角标越界异常。  
        sop("获取的子串s1为:");  
        sop(s1);  
        String s2=s.substring(7,20); //包含头,不包含尾。 获取整个字符串:s.substring(0,s.length());  
        sop("获取的子串s2为:");  
        sop(s2);  
    }  
    //切割  
    public static void method_split(){  
        String s="zhangsan,lisi,wangwu";  
        String[] arr=s.split("a");  
        sop("原字符串为:");  
        sop(s);  
        sop("切割后的字符串为:");  
        for(int x=0;x<arr.length;x++)  
        {  
            System.out.print(arr[x]+" ");  
        }  
        System.out.println();  
        String qiege="zhaang shanag,liashi,haangz";
        String[]aee=qiege.split("a");
        for (int i = 0; i < aee.length; i++) {
            System.out.print(aee[i]+" ");
        }
       
    }  
    //判断  
    public static void method_is(){  
        String str="ArrayDemo.java";  
        String str1="arraydemo.java";  
        //判断文件名称是否以Array开头  
        sop(str.startsWith("Array"));  
        //判断文件名称是否是以.java结尾  
        sop(str.endsWith(".java"));  
        //判断文件名称中是否包含Demo  
        sop(str.contains("Demo"));  
        //判断两个文件名是否相同(区分大小写)  
        sop(str.equals(str1));  
        //判断两个文件名是否相同(不区分大小写)  
        sop(str.equalsIgnoreCase(str1));  
    }  
    //获取  
    public static void method_get(){  
        String str="abcdeakpf";  
        sop("字符串为:"+str);  
        //长度  
        sop("字符串的长度为:"+str.length());  
        //根据索引获取字符  
        sop("角标为四的位置上的字符为:"+str.charAt(4));//当访问到字符串中不存在的角标时,会发生 StringIndexOutOfBoundsException异常  
        //根据字符获取索引  
        sop("从角标为3的位置开始往后索引 a 出现的位置为:"+str.indexOf('a',3));//如果没有找到返回-1  
        //反向索引一个字符出现的位置  
        sop("从字符串右面开始索引第一个a出现的位置为:"+str.lastIndexOf("a"));  
    }  
    //转换  
    public static void method_trans(){  
        char[] arr={'a','b','c','d','e','f','g','h'};  
        String str="jkasdhavsgjv";  
        char[] a=str.toCharArray();  
        //字符串操作  
        System.out.print("将字符串转换为字符数组为:[");  
        for(int x=0;x<a.length;x++)  
        {  
            if(x<a.length-1)  
                System.out.print(a[x]+",");  
            else  
                System.out.print("]");  
        }  
        System.out.println();  
        //字符数组操作  
        System.out.print("字符数组为:[");  
        for(int x=0;x<arr.length;x++)  
        {  
            if(x<arr.length-1)  
                System.out.print(arr[x]+",");  
            else  
                System.out.print("]");  
        }  
        System.out.println();  
        String s=new String(arr);  
        sop("转换成字符串为:"+s);  
        //获取从角标为1的位置的字符开始三个字符  
        String s1=new String(arr,1,3);  
        sop("从角标为1的位置的字符开始三个字符组成的字符串为:"+s1);  
    }  
    //替换  
    public static void method_replace(){  
          
        String s="      hello java     ";  
          
        String s1=s.replace('a', 'n'); //如果要替换的字符不存在,则返回的还是原字符串  
          
        sop("原来的字符串为:"+s);  
          
        sop("替换字符后的字符串为:"+s1);  
          
    }  
    //主函数  
    public static void main(String[] args) {  
       // method_get();  
       // //method_is();  
        //  method_split();
        method_replace();    
      //  method_sub();
       // method_7();  
        // method_trans();
    }  
    public static void sop(Object obj){  
        System.out.println(obj);  
    }  

equals( )和==的区别

equals是String的方法,源代码如下:
 public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}

可以看出equals方法也是使用==来实现判断的,但是他们的区别是,equals是判断值是否一样,忽略存储地址是否来自同一个空间,
                 String s4="11";
		String s5=s4;
		String s6=new String("11");
		System.out.println(s4==s5);//输出结果true
		System.out.println(s4.equals(s5));//输出结果true
		System.out.println(s4==s6);//输出结果false
		System.out.println(s4.equals(s6));//输出结果true

String,StringBuilder以及StringBuffer的区别

1,String 是常量,定义的值是不能修改的,表面上是可以修改,但实则是新增空间并且重新定义值,如果经常进行这种操作会导致参数很多垃圾,浪费资源,然而stringBuilder和StringBuffer是不会的。
2,StringBuffer和StringBuilder是String的升级类,功能跟加强大
3,StringBuffer 是线程安全的,StringBuilder不支持线程安全,但是它的速度会比较快,
4,执行速度方面 StringBuilder > StringBuffer > String






String str1 = "hello";
String str2 = new String("hello");
String str3 = str2;
System. out.println("str1 == str2 --> " + (str1 == str2)); // false
System. out.println("str1 == str3 --> " + (str1 == str3)); // false
System. out.println("str2 == str3 --> " + (str2 == str3)); // true

猜你喜欢

转载自blog.csdn.net/chengderong123/article/details/79588907