JAVA初窥-DAY17

String

定义String的几种方式:

	String str1 = "lit";
	String str2 = new String("lit");
	char[] ch = {'l','i','t','a','o'};
	String str3 = new String(ch);
	String str4 = new String(ch,1,2);//从1位置开始截取2个字符
	System.out.println(str1);
	System.out.println(str2);
	System.out.println(str3);
	System.out.println(str4);
intern

intern方法:也叫入池方法,检测常量池中是否已经有该字符串,如果有,则直接指向该字符串,如果没有再进行创建。
若两个字符串进行比较,用equals,如果比较字符串变量中存储的地址,则用==:

	String str1 = "lit";
	String str2 = new String("lit");
	System.out.println(str1==str2);
	char[] ch = {'l','i','t','a','o'};
	String str3 = new String(ch);
	System.out.println(str1==str3);
	String str4 = new String(ch,0,3);
	System.out.println(str1==str4);
	String str5 = new String("lit");
	System.out.println(str2==str5);
	String str9 = str1 + "";
	System.out.println(str1==str9);
	//以上都为false
	String str6 = new String("lit").intern();
	System.out.println(str1==str6);
	String str7 = new String("l"+"i"+"t").intern();
	System.out.println(str1==str7);
	String str8 = "li"+"t";
	System.out.println(str1==str8);
临时对象

临时对象:代码如下,此时虽然改变了变量str中的值,但是在这个过程中却会产生一些临时变量,在变量改变次数较少时,影响较小,但在次数较大时,影响就比较大了。

	String str = "lit";
	str = str+"...";
	str = str+"!!!";
获取指定位置的字符

toCharArray():

    public static void main(String[] args) {
        String str = "lit-.-";
        char[] arr = str.toCharArray();
        for (int i = 0; i < arr.length; i++) {//arr.length是一个属性 
            System.out.println(arr[i]);
        }
    }

charAt():

    public static void main(String[] args) {
        String str = "lit-.-";
        for (int i = 0; i < str.length(); i++) {//sre.length()是一个方法
            System.out.println(str.charAt(i)); 
        }
    }

判断是否有不是数字的字符:ASCII表,通过给char的值加减32也可转换英文字符大小写

    public static void main(String[] args) {
        String str = "1234567";
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if(ch<'0'||ch>'9'){
            	System.out.println("有不是数字的字符");
            	break;
            } 
        }
    }
字节码转字符

把字节码转字符:

    public static void main(String[] args) {
        byte[] bytes ={97,98,99,100};
        String str = new String(bytes,2,2);//从第二个元素开始,取两个元素转为字符存到str里
        System.out.println(str);
        str = new String(bytes,0,4);
        byte[] byte = str.getBytes();//字符转字节
        System.out.println(Arrays.toString(byte));//反向
    }

字符转字节(选):

public static void main(String[] args) throws UnsupportedEncodingException {
    String str = "中国人";
    byte[] bytes = str.getBytes("GBK");//把str中的字符转为GBK字节码,也可转成其他字节码
    System.out.println(Arrays.toString(bytes));
}
字符串的比较

字符串的比较一般用equals来比较
字符串不区分大小写比较:eaualsIgnoreCase

    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "AbC";
        System.out.println(str1.equals(str2));
        System.out.println(str1.equalsIgnoreCase(str2));
    }

字符串的比较并排序:compareTo
compareTo对汉字字符串也可进行比较

反射(选)
	String str = "ait";
    //反射
    Class cl = String.class;//指向String类源码
    Field valueField =  cl.getDeclaredField("value");//在源码中寻找value变量
    valueField.setAccessible(true);//把value的访问属性修改为true
    char[] value = (char[]) valueField.get(str);//定义一个新char[]类型数组的变量来接收String中的final char[] value
    value[0] = 'l';//修改这个a为l
    System.out.println(str);

StringBuilder

单线程

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("qqq");
        sb.append("eee");
        String str = sb.toString();
        System.out.println(sb);//虽然结果与直接用String拼接结果一样,但是此时是没有临时对象的产生。
        System.out.println(str);
    }

StringBuffer

多线程
synchronized 保证线程安全

    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer();
        sb1.append("qqq");
        sb1.append("weq");
        String str = sb1.toString();
        System.out.println(str);
        System.out.println(sb1);//虽然结果与直接用String拼接结果一样,但是此时是没有临时对象的产生。
    }

区别

1、String的拼接会产生新的对象,但是StringBuilder和StringBuffer使用append方法来进行拼接,返回的是当前对象,这样就可以避免临时对象的产生。
2、String的拼接会被优化为StringBuilder
3、String的内容不可修改,而StringBuilder和StringBuffer的内容可以修改
3、StringBuilder采用异步处理,属于线程不安全操作,而StringBuffer采用同步处理,属于线程安全操作

PS:过时方法:如果一个方法被Deprecated注解,则此方法已经过时。(注解就是写在方法上一行用@来表示的,如重写方法的注解为@Override)

String补充

Day18
String转int
ASCII表

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值