1,字符串中的每一个元素都有自己的索引,其中最能忽视的是空格;
2,字符串在定义后就不能改变其长度,是一个常量,放在常量池中;
3,重新给字符串一个值,实质是其引用的地址发生改变,而不是像其他数据类型,赋值是覆盖;
4,字符串的拼接其实是将两个字符串放在一个新建的字符串当中;因此,如果需要频繁的改变字符串,就不要使用String,在创建字符串的时候需要时间和内存,在拼接字符串的时候又需要时间,十分的浪费资源;可以使用StringBuffer()和StringBuilder();
5,字符串的拼接:" "+" "---加号两边都是双引号的字符串,那么拼接是在编译前就进行的;所以"a","b"都是有自己独立的空间,但是"a"+"b"="ab";常量池中有"ab"就会直接引用;
并且只要+两边不是引号括起来的字符串,那么在进行拼接的时候都会创建String()对象;
6,创建字符串的方式:
第一种是:String str1="a";,这是在常量池中创建"a",再给str1引用;只是创建了一个对象;
第二种是:String str2=new String;str2="b";这是先new了一个String对象,再去常量池中查找"b",没找到之后再创建;创建完成之后再将其指向"b";这样就创建了两个对象;
7,创建字符串时,创建了几个对象的问题:
String str="a"+newString("b");
创建过程:在常量池中查找"a",没有找到,再在常量池中创建;
然后在堆内存中创建一个StringBuffer对象,
再在堆内存当中创建一个String对象str1;再在常量池中查找"b",没找到再创建一个"b",
再将"b"放在String的对象中,最后将"a"和String的对象放在StringBuffer中;
最后str引用StringBudffer;
在这个过程中一共创建了4个对象:"a",StringBffer,Str1,"b";
7,
String方法
lenth ():从"开始,空格也算;
trim(): 去除字符串首尾所有的空格;调用的时候是复制原来的字符串,不会对原来的字符串又影响;输入账号密码的时候;
toUppercase 大写;字母有用
toLowercase 小写;字母有用
isEmpyt() 判断字符是否为空,也就是判断字符串产长度是否为0;
getBytes(),将字符串按照默认编码方式转换为字节数组,并且转换为ASCII码,中文是三个;
toCharArray();将字符串转换为字符串数组;如果进行比较,比较对象是char类型;遍历字符串数组是可以使用增强for循环;
equalsignoreCase(String str):忽略大小写,比较和指定字符串是否相同;
equals()
charAt(index):返回指定索引位置的字符;
indexof(String):获取某个字符串第一次出现的位置;不存在的为-1;可以用来检验是否存在;;可以限制出现的次数不为1次;两个来联合使用;还可以获取字串的位置;
lastindexof(String):最后一次出现的位置;不存在的为-1;
contains(charsquence):验证是否存在指定字符系列;
concat(String):将指定的字符串拼接到字符串末尾;是创建一个两个字符串长度相加的新字符串,再逐一放进去;
startswith(String):检测是否以指定字符串开始
endswith(String):相反
substring(start):给其实位置到原来字符串末尾,得到字串,并保存;(写0无用);当两个参数时左闭右开区间;数组越界;
split():按照指定的正则表达式来分割,如果指定字符串不在末尾得到n+1个字串;如躲在末尾可以得到n个,开头分割的算;末尾的不算;是尾随的字符串不包括在里面;
replace(oldstring,newstring);将选中的的字符串转置换为指定的字符串;
String.valueof 转换类型;原始转字符