1。简介1、String是Java数据类型中的引用类型,不是基本数据类型。2、Java中的String对象在英文输入法下都是用双引号("")包起来的。---“abc”、“123”、“对象”。3、String对象放在Java内存中方法区的常量池中。(因为在实际开发中,String使用的太频繁了,为了提高执行效率,放在方法区的常量池中)。二、String的不可变特性(长度和内容不可改变)1、在String类中包含一个数组:privatefinalchar[]value;//存储String中的每一个字符串2.final的意思是“final,Thefinal”的意思,变量一旦赋值,就不能再赋值。3.final:finalunchangeable-->地址不可改变,数组长度不可改变。4.private:私有的,在当前类中-->数组的内容不能改变。5、也就是说,“abc”从生到死都是不可变的,不能变成“abcd”或“ab”3、创建一个字符串Stringstr1="abc";方法一:从常量池入手查看是否有“abc”数据大厅,如果有直接指向,如果没有,重新创建,然后再指向。str1最终指向的是常量池的空间地址。.Stringstr2=newString("abc");方法二:先在堆空间创建,这里维护着Value属性指向常量池的abc空间。如果常量池中没有“abc”,则创建它,并通过Value指向常量池的abc空间地址。str2最终指向的是堆中的地址。四、字符串的比较1、比较时,可以使用“==”符号,也可以使用equals(Stringstr)方法。注意:“==”比较的是基本类型的值,或者引用类型的地址。同一个对象),子类经常重写这个方法来判断内容是否相等。Equal=>truenotequal=>falsequalsIgnoreCase(StringanotherString)将这个字符串与另一个字符串进行比较,不管大小写。equals()会判断大小写差异,equalsIgnoreCase()不会判断大小写差异:五、String的特点1.Stringa="hello"+"world";创建了多少个对象?Stringe="helloworld"==>编译器优化等价物:Stringa="helloworld";//一个对象a==e?//true,指向同一个地址2.Stringa="hello"Stringb="world"Stringc=a+b;Stringd="helloworld"创建了多少个对象?三者先在常量池中创建“hello”,地址指向str1,然后创建world,指向str2。对于c,首先创建一个StringBuilder(或StringBuffer)对象,通过append连接得到“helloworld”,然后调用toString()将地址转换为c。字符串c=a+b;c==d?//false,指向的地址不同,见堆6.String方法(常用方法)trim()去除当前字符串两边的空白字符。不会删除中间的空格,只会删除两边的空格。substring(intstart,intend)截取当前字符串中指定范围内的字符串(包括头不包括尾)toUpperCase()将当前字符串中的英文部分全部转为大写toLowerCase()将中的英文部分转为大写当前字符串的英文部分全部转为小写valueOf()String类提供的静态方法将其他数据类型转为Stringlength()返回字符串的长度concat()将给定的字符串拼接在当前字符串之后byte[]=getBytes()char[]=toCharArray()将当前字符串转换为指定类型的数组String[]a=split("expression")根据给定的表达式拆分原始字符串split方法的简单使用以“-”为“中介”将字符串拆分成一个个的字符串1000——10000中的回文数回文数指的是正序(从左到右)和反序(从右到左读)是相同的整数。例如:10011221publicclassHuiWenShu{publicstaticvoidmain(String[]args){for(inti=1000;i<10000;i++){//将int类型的值转换成StringstringstrNum=Integer.到字符串(我);//使用String中的split方法对字符串进行拆分String[]str=strNum.split("");//用于判断是否为回文booleanflag=true;/*1221split分为:1221比较左右值是否相等*/for(intj=0;j
