VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 【JAVA】笔记(8)--- java.lang.String 精讲

String 特性:

1.String 表示字符串类型,属于引用数据类型,所以其储存的是地址;

2.java 中规定,双引号括起来的字符串是不可变的,也就说” name “永远也只能是” name “,不能改变;

3.由于字符串在使用中过于频繁,所以为了保证执行效率,SUN 公司设定把字符串放到了方法区的字符串常量池中;

4.凡是双引号括起来的,都在字符串常量池中有一份;

String类 构造方法:

1.String str = "java" ; //首先查找字符串常量池中是否有“java”,若无,则创建并将其地址返回给 栈内存中的字符串变量 str ,若有,则直接返回给 str ;

以下均只讨论字符串常量池中没有被查找字符串的情况

2.String str = new String( "java" ) ; //首先查找字符串常量池中是否有“java”,若无,则创建并将其地址返回给 堆内存中的String对象,然后再将此String对象的地址返回给栈内存中的字符串变量 str;

3.String str = new String( byte数组 ) ;

4.String str = new String( byte数组 ,起始下标,长度 ) ;

6.String str = new String( char数组 ) ;

5.String str = new String( char数组 ,起始下标,长度 ) ;

3,4,5,6构造方法的栗子:

public class pra{
    public static void main(String[] args) {
        byte [] b={97,98,99};
        char [] c={'H','e','l','l','o'};
        String s1=new String(b);
        System.out.println(s1);
        String s2=new String(b,0,2);
        System.out.println(s2);
        String s3=new String(c);
        System.out.println(s3);
        String s4=new String(c,0,4);
        System.out.println(s4);
    }
}

运行结果:
------------------------
abc
ab
Hello
Hell

字符串常量池:

String str = ” zifu“ + ” chuan “ ;

//(先查找字符串常量池中有无“zifu”“chuan”,若无)在字符串常量池中创建 ” zifu “ ,” chuan “ ,”  zifuchuan “,三个字符串;若print (str),则str会直接指向字符串常量池,并返回“ zifuchuan ”

String strr = “  zifu ”;

//字符串常量池无变化(因为已存在“zifu”);

辅助理解:

1.String s1=“ java ”;

  String s2=“ java ”;

  System.out.println( s1==s2 ) // 输出true/false

答:true,因为字符串常量池中的“java”是不变的,所以无论是s1还是s2,储存的地址对应的都是那个字符串常量池中的“java”,所以自然储存的地址是相同的,而“==”比较地址,输出true;

2.String s1=new String(“ java ”);

  String s2=new String(“ java ”);

  System.out.println( s1==s2 ) // 输出true/false?

答:false,s1与s2只是储存了“=”右边在堆内存中创建的String对象的地址,而这俩个new出来的地址是不同的,所以输出“false”;

再问内存中一共创建了几个对象?

答:3个,方法区中一个 “java”,堆内存中俩个String对象;

String类 的方法:

注意:双引号中的空格正常会影响运行结果,但为了方便阅读,博主加上了一些空格(当它不存在就好了~~)

1.char charAt( int index )

System.out.println( "王狗蛋".charAt( 1 ) ) ; // 输出:狗

2.boolean contains( CharSequence s ) //是否包含

System.out.println( "http".contains( "ht" ) ) //输出:true

3.boolean endWith( String string ) //是否以其结尾

System.out.println( "nameabn".endWith( abn ) ) //输出:true

4.boolean equals( Object object ) // 见 java笔记(6) 

5.boolean equalsIgnoranceCase ( String string ) //判断字符串是否相等,并忽略大小写

System.out.println( "AAA". equalsIgnoranceCase( “aaa” ) ) //输出:true

6.byte [ ] getBytes(  ) //把字符串转化为byte数组

byte [ ] bytes=" abc ".getBytes(  ) ;

遍历数组 bytes ,输出:97    98      99

7.int indexOf( String string ) //判断某个字符串在当前字符串中第一次出现的索引(下标)

System.out.println( "hello". indexOf( "el" )) //输出:1

8.boolean isEmpty(  ) //判断是否为空字符串(底层调用“ Length( ) ”方法)

System.out.println( "yes".isEmpty( ) ) //输出:false

9.int Length( ) //输出字符串长度

System.out.println( "12345".Length( ) ) //输出:5

注意:Length( )方法与“ .length ”不同,前者返回字符串长度,后者返回数组长度

10.int lastIndexOf( String string )//输出某个字符串在当前字符串中最后一次出现的索引(下标)

System.out.println( "mynameisname" .lastIndexOf( “name” ) ) //输出:8

11.String repalce( CharSequence c1 , CharSequence c2 ) //替换字符串

System.out.println("name" . replace ( "name" , " good " ) ) ; //输出:good

12.String [ ] split ( String string ) //根据后面的字符串对前面的字符串进行拆分

String [ ] string = "1,2;3,4;5," . split( " , " ) //输出:1      2 ; 3      4 ; 5

13.boolean startsWith( String string ) //是否以其开始

System.out.println( "nameabn".startsWith( na ) ) //输出:true

14.String subString( int i ) //以 i 为起始下标,截取以后的字符串

System.out.println( "123456789". subString( 2 ) ) //输出:3456789

15.String subString( int i , int j ) //以 i 为起始下标(包括),以 j 为终点下标(不包括),截取字符串

System.out.println( "123456789" . substring( 2 , 9 ) ) //输出:3456789

16.char [ ] toCharArray (  ) //把字符串转化为 char 数组

char [ ] chars =" abc ". toCharArray (  ) ;

遍历数组 chars ,输出:a    b     c

17.String toLowerCase( ) //全转换为小写

System.out.println( "abcd" .  toLowerCase( ) ) //输出:ABCD

18.String toUpperCase( ) //全转换为大写

System.out.println( "ABCD" .  toUpperCase( ) ) //输出:abcd

19.String trim( ) //去除字符串中的空格

System.out.println("              hahaha               " . trim( ) ) ; //输出:hahaha

20.String中只有一个静态方法--- vauleOf( ) //将非字符串转换为字符串

String str1 = String . valueOf( true ) ;  //boolean--->String

String str2 = String . valueOf( 1.33 ) ;  //double--->String

String str3 = String . valueOf( 100 ) ;  //int--->String

21.int compareTo( String string ) //大小根据26个英文字母排序而定

System.out.println( "abc".compareTo( “abc” ) ) //输出 0;

System.out.println( "abc".compareTo( ”abz“ ) ) //输出 -1;

System.out.println( "aby".compareTo( “abd” ) ) //输出 1;

字符串拼接:

1.通过拼接符“ + ”进行拼接,有一个缺点,就是每次拼接,都会在字符串常量池中创建俩个对象(在拼接部分字符串为新字符串的情况下),浪费内存;

2.通过 stringBuffer 和 stringBuilder 方法来进行拼接;

栗子老师:

public class pra {
    public static void main(String[] args) {
        StringBuffer str1=new StringBuffer();
        StringBuilder str2=new StringBuilder();
        str1.append("hello");
        System.out.println("StringBuffer---str1:"+str1);
        str1.append(" world");
        System.out.println("StringBuffer---str1:"+str1);
        str2.append("hello world");
        System.out.println("StringBuilder---str2:"+str2);
    }
}

运行结果:
--------------------------
StringBuffer---str1:hello
StringBuffer---str1:hello world
StringBuilder---str2:hello world

Process finished with exit code 0

stringbuffer和stringbuilder的区别,目前博主只知道在线程安全方面,StringBuffer >> StringBuilder( 不安全 ) ;

随笔:

1.System.out.println( "jim".equals( 字符串变量) ) ;

  System.out.println( "字符串变量".equals(jim ) ) ;

  //更推荐使用第一种方式来判断这俩个字符串内容是否相同,因为第一种可以避免“ 字符串变量为null ”而导致的空指针异常;

2.通过源代码可以看出:System.out.println( ) ; 这个方法输出任何类型数据时,都是先转换为字符串,再输出

来源:https://www.cnblogs.com/Burning-youth/p/15559188.html


相关教程