String类 常量池 常量优化

字符串

String类引用类型默认值null

声明创建字符串

Stringstr="abd123您好!"

str=newString();

str=newString("456");

将数组添加到字符串中

char[]arr={'a','v','y',97};

str=newString(arr);

System.out.println(str);// avy97

 

字符串的拼接   加号+  在拼接字符串和数学运算时优先级是一样的

System.out.println("123"+123+123);//123123123

System.out.println(123+123+"123");//246123

 

字符串      所有类型   相加 +  后得到的都是字符串

str="123"+"abc";//123abc

str="123"+45;//12345

str="123"+new   Object();//123+Object对象的toString的结果

str="123"+new   int[]{1,2,3};//123  +  数组第一个元素的地址    数组是引用类型

String----类型中的常用方法

valueOf

将传入的参数转成字符串

System.out.println(String.valueOf("c"));//c

System.out.println(String.valueOf(43));//43

System.out.println(String.valueOf(""));//一个空格

System.out.println(test(123));   //123

System.out.println(test(null));   //空值默认类型是String

equals方法

字符串比较

boolean   b="123".equals("123");

System.out.println(b);   //true

String  strA=new  String("123");

String  strB=new  String("123");

boolean  bb=strA.equals(strB);

System.out.println(bb);     //true

indexOf

查找字符串中元素第一个出现的位置,找不到返回-1

lastIndexOf

查找最后一个出现的位置

int   index="12343456".indexOf("34");

int   indexA="12343456".indexOf("0");

int   indexB="12343456".lastIndexOf("34");

System.out.println(index);   //2

System.out.println(indexA);   //-1

System.out.println(indexB);    //4

charAt

获取指定位置的字符

charitem="12343456".charAt(4);   //可能会出现越界情况

System.out.println(item);   //3

subString

从那个下标开始截取字符串

包含开始下标,不包含结束下标,左闭右开

StringstrS="12343456".substring(4);

System.out.println(strS);           //3456

strS="12343456".substring(0,4);

System.out.println(strS);           //1234

replace

替换

replaceAll

正则表达式替换

str="12343456".replace("34","AaA");

System.out.println(str);    //12AaAAaA56

str="12343456".replaceAll(".","A");   //正则表达式替换.代表任意字符

System.out.println(str);   //AAAAAAAA

str="1234345634".replaceAll("34","AaA");  //正则表达式替换

System.out.println(str);    //12AaAAaA56AaA

split

分割字符串

String[]strArr="12343456".split("3");

System.out.println(Arrays.toString(strArr));    // [12, 4, 456]

length

字符串长度

intl="123123".length();

System.out.println(l);      //6

trim

去除前后空白位 空格 \n \r \t

str="\n\r\n 1 2 3 \t";

System.out.println(str);//换行加上空格1 2 3空格

System.out.println(str.trim());//1 2 3

toUpperCase

转换成大写(针对字母的)

toLowerCase

转换成小写(针对字母的)

str="123abcABC".toUpperCase();//转换成大写

System.out.println(str);//123ABCABC

str="123abcABC".toLowerCase();//转换成小写

System.out.println(str);//123abcabc

isEmpty判断是否是空串

booleanbool="123".isEmpty();//空串返回true

System.out.println(bool);

if(!str.isEmpty()){

//str有内容执行

}

startsWith

是否以某字符串开始

endsWith

是否以某字符串结束

bool="123456".startsWith("12");  //是否以字符串开始

System.out.println(bool);        //true

bool="123456".endsWith("56");  //是否以字符串结束

System.out.println(bool);         //true

equalsIgnoreCase

忽略字母大小写比较

System.out.println("abc".equalsIgnoreCase("abc"));//true

字符串常量池        容量

字符串怎样加入常量池中-----使用量的方式声明的字符串就会加入到常量池中

程序中第一次使用量的形式定义“123”,会将这个字符串对象存入到<字符串常量池中>

之后使用量的形式使用该对象,就执行使用常量池中的对象

char[]  arr={'a','b','c'};

str=new  String(arr);

String  strA="123";

String  strB="123";

System.out.println(strA==strB);   //true

常量优化解析文件时

常量和常量相加不可变量相加都是进行常量优化

函数方法调用需要运行的则不不执行常量池中的对象

常量优化  

明确了值    String 常量+字符串

String  strE="12"+"3";

String  strF="1"+"2"+"3";

String  strG="12"+3;

System.out.println(strA==strE);   //true

System.out.println(strA==strF);   //true

System.out.println(strA==strG);   //true

final   String   aa="12";//final定义完后变成常量

String  strI=aa+"3";

System.out.println(strA==strI);   //true

 

需要运行的  String常量+String变量

String  strC=new  String("123");

String  strD=new  String("123");

System.out.println(strA==strC);   //false    

System.out.println(strC==strD);   //false

 

String  item="12";   //    相当于方法返回值“12”+“3”

String  strH=item+"3"; //    需要运行的

String  strHH=item+3;  //    需要运行的

System.out.println(strH==strHH);    //false

System.out.println(strA==strH);     //false

System.out.println(strC==strH);      //false

intern

str.intern();

返回    str对象在字符串常量池中的副本对象

当调用intern方法时,

此String对象通过equals(Object)方法判断为相等的字符串,

如果池中有相等的字符串则返回池中的字符串。

否则,将此String对象添加到池中,并返回对此String对象的引用。

作用:

strA=newString("123123");

strB=newString("123123");

System.out.println(strA.equals(strB));   //true

System.out.println(strA==strB);   //false

System.out.println(strA.intern()==strB.intern());    //true

newString("abc"+"12")创建了几个对象

一个或两个abc12是否在常量池中有的话则new一个新对象没有就加入到常量池中再new一个新对象

String s = new String("二哥");
String s1 = new String("二哥");

两行代码会创建三个对象,字符串常量池中一个,堆上两个。

String s = "三妹";
String s1 = "三妹";

这两行代码只会创建一个对象,就是字符串常量池中的那个。

String字符串定义后就不可以改变存在常量池中

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值