Java_String

作者: Ethan丶Xiao | 来源:发表于2018-04-26 09:06 被阅读0次

不可变的字符串: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字符串的相互转化;

  • String str1 = new String(char[]数组);//把char数组转化为字符串
  • String类型.toCharArray();//把String字符串转化为char[]数组;
  • String字符串.geBytes();//把字符串转化为byte[]数组;
  • String str2 = new String(byte[]数组);//把byte[]数组转化为String字符串;

获取字符串信息:

  • int len1 = String.length();//获取一个字符串的长度
  • char ch1 = String.charAt(index 索引值);//返回索引值所对应的char值;
  • int num1 = String.indexOf(String 子字符串); // 返回子字符串在父字符串中第一次出现的索引;
  • int num1 = String.lastIndexOf(String 子字符串);//返回子字符串在父字符串中最后一次出现的索引;

字符串的大小写转换:

  • String.toUpperCase();//把字符串全部转换为大写
  • String.toLowerCase();//把字符串全部转换为小写
  • String[] 数组名 = String字符串.split(正则表达式);
  • 根据给定的正则表达式拆分字符串;

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

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

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

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

相关文章

  • Java_String

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

  • JAVA_String 示例

    例一 模拟一个trim方法,去除字符串两端的空格。 思路:1,判断字符串第一个位置是否是空格,如果是继续向下判断...

网友评论

    本文标题:Java_String

    本文链接:https://www.haomeiwen.com/subject/nixplftx.html