Java笔记

来源:互联网 发布:凤岗淘宝摄影 编辑:程序博客网 时间:2024/05/17 05:53

字符串对象一旦被初始化就不会改变

String s = "abc";s = "nba";String s1 = "abc";System.out.println(s==s1);

输出结果:true

s只是一个引用变量,开始指向的是abc对象,后来指向nba对象,但是abc对象本身是不会改变的
在字符串建立的时候,内存中会建立一个字符串缓冲区,也可以理解成字符串常量池。开始时常量池是空的,在建立s的时候,系统会在常量池中寻找是否存在abc的字符串,如果不存在,就会建立这个字符串,然后把地址值赋给s。在建立s1的时候,系统也会先在常量池中寻找是否存在abc的字符串,发现存在后,就会直接把这个地址值赋给s1,所以s和s1的地址值是相等的,结果返回true。

字符串既然是对象,所以也可以通过new关键字来创建。String类中有String(String original)构造方法,可以接收字符串,也就是可以通过new来创建字符串对象。

String s1 = "abc";String s2 = new String("abc");System.out.println(s1==s2);

输出结果:false

第一句是在字符串常量池中创建了一个对象,然后把这个地址值赋给s1。
第二句是在堆内存中创建了一个字符串abc对象,然后通过new创建了一个对象,再把字符串abc作为参数传递给String构造函数。
所以他们的地址值是不一样的。
调用equals函数进行比较输出结果是false,因为String类复写了Object中的方法,比较的是字符串中的内容。

  • 构造函数
    String(byte[] bytes):通过byte数组构造字符串对象,byte数组中的内容会根据Unicode表转换成字符对象再连接起来组成字符串。
    String(byte[] bytes, int offset, int length):通过byte数组的子数组构造字符串对象,offset:子数组第一个byte开始索引,length:子数组长度
    String(char[] value):通过char数组构造字符串对象
    String(cahr[] value,int offset ,int count):通过字符数组的子数组构造字符串对象,offset:子数组第一个字符的索引,count:子数组长度
    String(StringBuffer buffer):通过StringBuffer构造字符串对象
    例:

    byte[] b = {97,98,99,100};char[] ch = {'q','w','e','r'};StringBuffer sb = new StringBuffer();sb.append("abc1");sb.append("abc2");sb.append("abc3");sb.append("abc4");String s1 = new String(b);String s2 = new String(b,1,3);String s3 = new String(ch);String s4 = new String (ch,1,3);String s5 = new String(sb);System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println(s4);System.out.println(s5);

    输出结果:
    abcd
    bcd
    qwer
    wer
    abc1abc2abc3abc4

  • 一般函数

    1. 获取
      1.1
      int length():获取字符串中字符的个数(长度)
      1.2
      char charAt(int index):根据位置获取字符
      1.3
      int indexOf(int ch):返回指定字符在字符串中第一次出现的索引,参数为字符或Unicode代码点,如果存在该参数字符则返回索引,如果不存在返回-1
      int indexOf(int ch, int fromIndex):返回指定字符在字符串中第一次出现的索引,在指定位置处开始搜索(向右)
      int indexOf(String str):返回参数字符串在字符串中第一次出现的索引
      int indexOf(String str, int fromIndex):返回参数字符串在字符串指定位置第一次出现的索引

      int lastIndexOf(int ch):返回指定字符在字符串中最后一次出现的索引
      int lastIndexOf(int ch ,int fromIndex):返回指定字符在字符串中的索引,在指定位置反向搜索(向左)
      int lastIndexOf(String str):返回参数字符串在字符串中最后一次出现的索引
      int lastIndexOf(String str, int fromIndex):返回参数字符串在字符串指定位置最后一次出现的索引
      1.4
      String subString(int beginIndex):获取字符串的子串,从开始索引一直到字符串末尾
      String subString(int beginIndex, int endIndex)获取字符串中一部分字符串,也叫子串。包括begin,不包括end。

      例:

      String str = new String("eabcdebc");System.out.println(str.length());System.out.println(str.charAt(6));System.out.println(str.indexOf('a'));System.out.println(str.indexOf('c',4));System.out.println(str.lastIndexOf('e',4));System.out.println(str.substring(2,5));

      输出结果:
      8
      b
      1
      7
      0
      bcd

    2. 转换
      2.1 String[] split(String regex):将字符串编程字符串数组(字符串的切割),涉及到正则表达式
      2.2 char[] toCharArray():将字符串变成字符数组,会根据Unicode将字符串中的内容变成对应的byte值。
      2.3 byte[] getBytes():将字符串变成字节数组
      2.4 String toUpperCase():将字符串中的字母变成大写
      String toLowerCase():将字符串中的字母变成小写
      2.5 String replace(char oldch, char newch):用新字符替换旧字符,返回一个新的字符串
      String replace(String s1, String s2):用新字符串替换旧字符串,返回一个新的字符串
      2.6 String trim():将字符串两端的空格去掉
      2.7 String concat(String str) :连接两个字符串,将str连接到String的结尾
      例:

      String str1 = "张三,李四,王五";String[] arr = str1.split(",");char[] ch = str1.toCharArray();String str2 = "ab你";String s3 = "ABC".toLowerCase();String s4 = str2.replace('a','z');String s5 = "     a     b     c      ".trim();String s6 = str1.concat("abc");

      输出结果:
      abc
      zb你
      a b c
      张三,李四,王五abc

    3. 判断
      3.1
      boolean equals(Object obj):判断两个字符串是否相同,如果相同返回ture,否则返回false。这个方法覆盖了Object中的equals方法,Object方法中比较的是对象的地址值,这里比较的是字符串中的内容。
      boolean equalsIgnoreCase(String anotherString):忽略大写比较字符串内容(原理是将字符串转成小写再进行比较)。
      3.2
      boolean contains(string str):字符串中是否包含参数字符串,包含就返回ture,否则返回false
      3.3
      boolean startsWith(string):字符串是否以指定字符串开头
      boolean endsWith(string):字符串是否以指定字符串结尾
      例:

      String s = "abc";System.out.println(s.equals("abc"));System.out.println(s.equalsIgnoreCase("AbC"));System.out.println(s.contains("ab"));System.out.println(s.startsWith("ab"));

      输出结果:
      true
      true
      true
      true

    4. 比较
      int compareTo(String anotherString):按照字典顺序比较两个字符串,结果返回一个Unicode差值,如果字符串相等则返回0。
      例:

      String str1 = new String("abc");String str2 = new String("abc");System.out.println(str1.equals(str2));System.out.println(str1.compareTo(str2));System.out.println(str1 == str2);

      输出结果:
      true
      0
      false

    5. 其他
      valueOf(int i):返回int参数的字符串表示形式(没有byte和short)

0 0
原创粉丝点击