*** 直接赋值:String 变量 =字符串常量(匿名对象)开辟一个堆内存和栈内存会入池
构造方法:String 变量 =new String("字符串");会开辟2个堆内存String("字符串")先开
再new又开,一个栈先后指向;不会自动入次,会产生垃圾,new String("字符串").intern()手工入池
在String中 String s="abc"; 是定义一个String变量s,jvm会先去字符串池
找有没有"abc",有就指向"abc",没有就在池中创建一个,再让s指向"abc"
String s=new String("abc");定义一个String变量s,再到内存中分配新的
空间"abc",让s指向这个内存地址
**字符串一旦定义不可改变,改变的是依靠引用关系(堆内存)改变的
*---关于[set]和[this]的运行过程---*
package cn.cast.xh;
public class StringDemo {
public static void main (String[]args) {
// 字符和字符串
//char s='a';
//int x=s;
//System.out.println(x);
/* 字符串数组
String str="123456";
if(isEmnp(str)) {
System.out.println("字符串全都有数字组成");
}else {
System.out.println("字符串不全是由数字组成");
}
}
public static boolean isEmnp(String temp) {
char [] sx=temp.toCharArray(); //字符串转为字符数组
for(int i=0;i<sx.length;i++) {
if(sx[i]<'0'||sx[i]>'9') { //大于字符9 或者小于字符0
//字符数组 要跟 字符 比较的
return false;
}
System.out.println(sx[i]);
}
return true; */
// 字节和字符串
String str="helloworld";
byte [] data=str.getBytes(); //将字符串转为字节数组
for(int i=0;i<data.length;i++) {
System.out.println(data[i]);//104 101 108 108 111 119 111 114 108 100
data[i] -=32; //将小写改大写
}
System.out.println(new String(data));//全部转换
System.out.println(new String(data,5,5));//部分转换
// 字符串的比较
String stra ="Hello";
String strb ="hEllo";
System.out.println(stra.equals(strb)); //false
System.out.println(stra.equalsIgnoreCase(strb)); //true 不判断大小写
System.out.println(stra.compareTo(strb)); //返回值为int 正 0 负比较大小
// 查找字符串的内容
String stt="helloworld";
System.out.println(stt.contains("z")); //判断内容是否存在 **
System.out.println(stt.indexOf("world"));//从前开始查找返回满足条件单词的第一个字母的索引
System.out.println(stt.indexOf("l",5));//从第5个索引开始查找
System.out.println(stt.lastIndexOf("l"));//从后开始查找返回满足条件单词的第一个字母的索引
System.out.println(stt.lastIndexOf("xx"));//内容不存在没有找到返回-1
System.out.println(stt.startsWith("h")); //以什么头
System.out.println(stt.startsWith("l", 2)); //空2 格以“l”开头
System.out.println(stt.endsWith("d")); //以什么结尾
// 字符串替换
String sttt="helloworld";
String stttA=sttt.replaceAll("l", "_"); //全部替换
String stttB=sttt.replaceFirst("l", "_");//替换首个满足要求的
System.out.println(stttA);
System.out.println(stttB);
// 字符串截取
String sxx="helloworld";
System.out.println(sxx.substring(2));//从指定索引截取到结尾
System.out.println(sxx.substring(2, 6));//从指定索引开始截取到指定结尾
// 字符串拆分为字符串数组
String sbx="hello_world_nihao_mldn";
String result [] =sbx.split("_"); //凭指定内容全拆 如果没有指定内容则按照美国字符来拆分
for(int i=0;i<result.length;i++) {
System.out.println(result[i]);
}
String resultB []=sbx.split("_", 2); //部分拆分 hello 如果没有指定内容就不会拆分
for(int i=0; i<resultB.length; i++) { // world_nihao_mldn
System.out.println(resultB[i]);
}
String sbc="192.120.8.24";
String resultC [] =sbx.split("."); //正则不可拆 要转义String resultC [] =sbx.split("\\.");
// 其他方法
String s1="*(*(HELLO world";
System.out.println(s1.toUpperCase()); //小转大写 非字母不会改变
System.out.println(s1.toLowerCase()); //大转小写
String s2=" hello world ";
System.out.println("【"+s2.trim()+"】");//去掉空格
String s3="hello"; //“+”和“concat”
String s4=s3+"world";
String s5=s3.concat("world");
String s6="helloworld";
System.out.println(s4==s6);//false “+”和“concat”
System.out.println(s5==s6);//false 都是false所以都开辟出了新的空间
//字符串长度
System.out.println(s3.length());//数组.length 字符串.length();
//数据入池
System.out.println(s3.intern());
//判断是否是空字符串【空字符串不是null,而是"",长度length是0】
System.out.println(s3.isEmpty());//false
System.out.println("".isEmpty());//true 不方便可以用 "".equals(s3);
System.out.println("*****************");
String n1="hello";
String n2=new String("hello");
String n3=n2;
String N="hello"+n1+"def"; //这里的hello==n1
System.out.println(n1.equals(n2));
System.out.println(n1.equals(n3));
System.out.println(n2.equals(n3));
System.out.println(n1==n2);
System.out.println(n1==n3);
System.out.println(n2==n3);
System.out.println("hello"==n1);
}
}
|
|