JAVA常用类——String类概述

JAVA常用类——String类概述

String类:代表字符串

String是一个final类,代表不可变的字符序列,也不可被继承

String对象的字符内容是存储在一个字符数组value[]中的

String类实现了Serializable接口,表示字符串是支持可序列化的

实现了Comparable接口,表示String可以比较大小

在这里插入图片描述


String字符串不可变的体现

  • 当对字符串重新赋值时,需要重新指定赋值区域,不能使用原有的字符数组赋值
  • 当对现有的字符串进行连接操作时,也需要重新指定赋值区域,不能使用原有的字符数组value赋值
  • 当对现有的字符串的某个位置上的内容进行操作时,也需要重新指定赋值区域,不能使用原有的字符数组value赋值
package String;


import org.junit.Test;

//String类的使用

public class StringTest01 {
    
    

   @Test
   public void Test(){
    
    
       String s1 = "abc";//字面量的定义方式
       //通过字面量的定义方式给字符串赋值,此时的字符串值声明在字符串常量池中(字符串常量池在方法区中)
      // 字符串常量池
       String s2 = "abc";

       //s1 = "hello";当对字符串重新赋值时,需要重新指定赋值区域,不能使用原有的字符数组赋值

       // 字符串常量池不会存储相同内容的字符串
       System.out.println(s1==s2);//比较s1,s2的地址值     true
       System.out.println(s1);//abc
       System.out.println(s2);//abc
       System.out.println("**********************************");
       String s3 = "abc";
       s3 +="def";
       //当对现有的字符串进行连接操作时,也需要重新指定赋值区域,不能使用原有的字符数组value赋值
       System.out.println(s3);//abcdef
       System.out.println("**********************************");

       //当对现有的字符串的某个位置上的内容进行操作时,也需要重新指定赋值区域,不能使用原有的字符数组value赋值
       String s4 = "abc";
       String s5 = s4.replace("a","b");
       System.out.println(s4);//abc
       System.out.println(s5);//bbc


   }
    public static void main(String[] args) {
    
    

    }
}

String不同拼接操作的对比

总结

  • 常量与常量 的拼接结果在常量池中,且常量池中不会存在相同内容的常量
  • 只要其中一个是变量,结果就在堆中
  • 如果拼接的结果调用intern()方法,返回值就在常量池中
package String;

import org.junit.Test;

/*
* String不同拼接操作的对比
* 总结
* 常量与常量的拼接结果在常量池中,且常量池中不会存在相同内容的常量
* 只要其中一个是变量,结果就在堆中
* 如果拼接的结果调用intern()方法,返回值就在常量池中
* 补充:如果变量前面加了final修饰,就变成了常量
* */
public class StringTest03 {
    
    
    @Test
    public void Test() {
    
    
        String s1 = "JAVAEE";
        String s2 = "hadoop";

        String s3 = "JAVAEEhadoop";
        String s4 = "JAVAEE" + "hadoop";

        String s5 = s1+"hadoop";
        String s6 = "JAVAEE"+s2;
        String s7 = s1 + s2;

        System.out.println(s3 == s4);//true
        System.out.println(s3 == s5);//false
        System.out.println(s3 == s6);//false
        System.out.println(s3 == s7);//false
        System.out.println(s5 == s6);//false
        System.out.println(s5 == s7);//false
        System.out.println(s6 == s7);//false

        String s8 = s5.intern();//返回得到的s8使用的常量值是已经存在的"JAVAEEhadoop"
        System.out.println(s3==s8);//true

    }
}

String类与其他结构的转换

package String;

import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Array;
import java.util.Arrays;

public class StringTest05 {
    
    
/*
* 测试String类与其他结构的转换
* String-->基本数据类型,包装类  调用包装类的静态方法:parseXxx(str)
*基本数据类型,包装类-->String    调用String重载的valueOf(xxx)方法
* */
         @Test
         public void test1(){
    
    
         String str1= "123";
         int i = Integer.parseInt(str1);//转化为int类型
             System.out.println(i);
         String s = String.valueOf(i);//转化为String类型
             System.out.println(s);
         }

/*
* String用char[]的转换
* String-->char[]  :调用String的toCharArray()方法
* char[]-->String  :调用String的构造器
* */
         @Test
         public void test2(){
    
    
             String str1 = "acc123";
             char[] charArray = str1.toCharArray();//转化为char[]类型
             for (int i = 0; i <charArray.length ; i++) {
    
    
                 System.out.println(charArray[i]);
             }
             char[]  arr = new char[]{
    
    'h','e','l','l','o'};
             //调用String类的构造器
             String s = new String(arr);//转化为String类型
             System.out.println(s);
         }

/*
*String与byte[]之间的转换
* String-->byte[] :调用getBytes()方法
* byte[]-->String :调用String的构造器
* */
         @Test
    public void test3() throws UnsupportedEncodingException {
    
    
             String s1 = "123abc中国";
             //编码  字符串--》字节
             //解码  字节--》字符串
             //编码集和解码集要一致,不然会出现乱码


             byte[] bytes = s1.getBytes();//使用utf-8字符集进行编码
             System.out.println(Arrays.toString(bytes));
             byte[] gbks = s1.getBytes("gbk");//使用gdk进行编码
             System.out.println(Arrays.toString(gbks));

             String s = new String(bytes);//转化为String类型     解码
             System.out.println(s);

         }
}

猜你喜欢

转载自blog.csdn.net/wpc2018/article/details/108548156