String在内存中的分析:

public class Demo {
    public static void main(String[] args){    	
    	String a = new String("xx"); //1、首先解释器在堆中的常量池中查找是否有xx变量,没有则创建。有就不在常量池中创建
    								 //2、在堆中再创建一个对象xx;a中的地址指向它;
    								 //所以,new一个字符串。至少会创建一个对象。最多创建两个
    	String b = "xx";             //直接赋值。最多创建一个对象,如果常量池中有,就不会在创建对象;
    	
    	//----------------------------------------------------------------
    	String c = "a";
    	String e = "a1";
    	String d = c+1; //在编译的是由,c为变量,并不能确定c的最终只为多少,所以d在运行期才被赋值.会创建新的对象,d指向的是堆中的变量,不会是指向常量池
    	System.out.println(d==e);//false;
    	
    	final String  f = "a";
    	String        g = f+1; //在编译的时候,由于f为常量,不可以被修改.所以g肯定是确定的,为a1;
    	String        h = "a1";//此时h使用已有的字符串a1;
    	System.out.println(g==h);//true
    	
    	String i = getA();
    	String j = i+1;
    	String k = "A1";
    	System.out.println(j==k);//false,getA()方法只能在运行期才能加载。所以i不可知;
    	
    	final String i2 = getD();
    	String j2 = i+1;
    	String k2 = "A1";
    	System.out.println(j2==k2);//false,getA()方法只能在运行期才能加载。所以i不可知;
    	
    }
    public static String getA(){
    	return "A";
    }
    public static String getD(){
    	return "A";
    }
}

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 字符串的方法:  

通过索引找字符串:charAt()

String x = "sdfdsfsd";
char a = x.charAt(2);
System.out.println(a);

将字符串变成数组:toCharArray()

String x = "sdfdsfsd";
System.out.println(Arrays.toString(x.toCharArray()));

将字符数组转换成字符串

char[] arr = {'a','b','c'};
String s1 = new String(arr);
System.out.println(s1); //abc
String s2 = new String(arr,0,2);//不包括2
System.out.println(s2); //ab

获取每一个字符串的字节:getBytes()

String s = "sdfds";
System.out.println(Arrays.toString(s.getBytes()));//[115, 100, 102, 100, 115]

字符串替代:replace()   replaceAll()

String s = "sdf33d33s";
System.out.println(s.replace("d","w"));
System.out.println(s.replaceAll("\\d", "*"));  //使用正则

字符串截取 substring()

String s = "sdf33d33s";
System.out.println(s.substring(2,4));

字符串切割 split()

String s = "sdf33d33s";
System.out.println(Arrays.toString(s.split("d")));

字符串包含字符串 contains()

String s = "sdf33d33s";
System.out.println(s.contains("df"));

查找 indexOf()  lastindexOf()

String s = "sdf33d33s";
System.out.println(s.indexOf("df")); //返回字符串所在的索引

判断字符串是否为空 isEmpty()

String s = "sdf33d33s";
System.out.println(s.isEmpty());//为空不代表为null

去掉字符串前后的空格 trim()

String s = "sdf33d33s";
System.out.println(s.trim());

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄