Java笔记

Java_String

2018-04-26  本文已影响0人  Ethan丶Xiao

不可变的字符串:String 创建完毕之后内容不能改变,改变之后就是一个新的对象;

可变的字符串:StringBuilder \ StringBuffer,当该对象创建完毕之后,当内容发生改变时,对象保持不变

字符串的本质:一个char类型的数组;String其实就是对插入数组的封装;

String对象的创建

通过字面量: String str1 = "hello";
最多创建一个对象,最少不创建对象;
如果在常量池中存在所创建的对象,那么此时可以 直接引用 不创建String对象
否则 先在常量池创建内存空间 在引用

通过构造器: String str2 = "hello";
至少创建一个String对象 最多创建两个String对象
new关键字绝对会在堆空间创建内存空间 所以至少创建一个对象;

区分:

String对象的空值:
表示引用为空: String str1 = null; 没有初始化,没有分配内存空间
表示内容为空: String str2 = ""; 已经初始化,分配内存空间,不过没有内容

判断字符串非空:

if(str != null && str!''''.equals()(str.trim())){
System.out.println("非空");
}else{
System.out.println("空");
}

字符串的比较操作:

使用 "==": 只能比较引用的内存地址是否相同
使用equals()方法: 在Object类中和 "==" 相同,建议子类覆盖 ; 去比较内容; String中覆盖了该方法,比较的是字符串内容;

单独使用 " " 创建的字符串都是直接量 , 编译时期就已经存储在常量池中;
使用new String(" ")创建的字符串会存储在堆空间中,在运行事情才会创建;
使用包含直接量字符串连接符进行连接创建的字符串 , 也是直接量在编译时期就已经存储在常量
池中;
使用包含String直接量(无final修饰符) 的字符串表达式创建的字符串表达式,(s1 + "aa") 创建的对
象是运行时期才创建的,存储在堆中;
(通过变量/调用方法去连接字符串,都只能在运行时期才能确定变量的值和方法的返回值,不存在编译器优化)


String的相关操作:

char[]数组和byte[]数组 与 String字符串的相互转化;

获取字符串信息:

字符串的大小写转换:

startsWith(String 判定条件);// 字符串是否以判定条件为开头;

String在做字符串拼接时效率极低;因为String是不可改变的,每次连接字符串都是创建新的对象;
Stringbuffer与Stringbuilder的区别;
都表示可变的字符串,功能方法都是相同的;
区别在于:
StringBuffer中的方法都使用了synchronized修饰符,表示同步的,在多线程并发的时候可以保证线程安全问题;性能较低;
StringBuilder都没有使用synchronized修饰,不安全,但性能较高;
建议使用StringBuilder;线程安全问题可以解决;

使用StringBuilder的默认无参数构造器,在底层默认创建了一个长度为16的char数组;
此时该数组只能存储16个字符,如果超过了,则会自动扩容;(创建更长的数组,再把之前的数组拷贝过去,效率低);
一般的,事先大概知道需要存储多少字符,应该直接传入参数;

常用操作:
StringBuilder.append(object obj);//往当前字符串追加内容
StringBuilder deleteCharAt();//删除指定位置的字符串;
StringBuilder.reverse();//字符串的反转操作;

上一篇下一篇

猜你喜欢

热点阅读