• 21.Java基础_String类


    String类构造方法

     1 package pack1;
     2 //推荐使用直接赋值的方式得到字符串
     3 public class test {
     4     public static void main(String[] args) {
     5         //public String(): 创建一个空白字符串对象,不含有任何内容
     6         String s1=new String();
     7         System.out.println("s1:"+s1); //"s1:  "
     8 
     9         //public String(char[] chs):根据字符数组的内容,来创建字符串内容
    10         char[] chs={'a','b','c'};
    11         String s2=new String(chs);
    12         System.out.println("s2: "+s2); //"s2: abc"
    13 
    14         //public String(byte[] bys): 根据字节数组的内容,来创建对象
    15         byte[] bys={97,98,99};
    16         String s3=new String(bys);
    17         System.out.println("s3: "+s3);  // "s3: abc"
    18 
    19         //public s="abc"; 直接赋值方式创建字符串对象,内容就是abc
    20         String s4="abc";
    21         System.out.println("s4 "+s4); //"s4: abc"
    22     }
    23 }

    String类特点:

    变量s1,s2,s3,s4在main函数的栈内存中,他们指向堆内存地址。char数组首先在栈内存开辟空间,然后new String()操作在堆内存中创建索引变量ref(用来链接堆内存中数组的首地址),可以看出s1,s2指向的地址是不同的,但是他们的堆内存中的索引都指向char数组。再来看s3,s4,用String s=“abc”方式创建出来的对象,字符串会被存储在堆内存中的常量池,如果有别的对象也用该方式创建,并且字符串完全一致,则共享常量池内的该字符串。

    注意:如果再来一句 s3="hdu"; s4的值会改变么?我试了一下,发现s4是不会改变的,所以执行该语句时,是又在堆内存的常量池中创建了一个“hdu”字符串,然后将其首地址赋给了s3,期间并不会改变s3所指向的地址,也不会改变常量池中的“abc”字符串

    String类对象的比较

     1 package pack1;
     2 //推荐使用直接赋值的方式得到字符串
     3 public class test {
     4     public static void main(String[] args) {
     5         //构造函数得到对象
     6         char[] chs={'a','b','c'};
     7         String s1=new String(chs);
     8         String s2=new String(chs);
     9 
    10         //直接赋值的方式得到对象
    11         String s3="abc";
    12         String s4="abc";
    13 
    14         //比较字符串对象地址是否相同
    15         System.out.println(s1==s2); //false
    16         System.out.println(s1==s3); //false
    17         System.out.println(s3==s4); //true
    18         System.out.println("------------");
    19 
    20         //比较字符串内容是否相同
    21         System.out.println(s1.equals(s2)); //true
    22         System.out.println(s1.equals(s3)); //true
    23         System.out.println(s1.equals(s4)); //true
    24     }
    25 }

  • 相关阅读:
    1-5概率的公理化的定义
    1-4几何概型
    1-3古典概型
    求逆序对数量
    1-2事件的基本运算
    1001 害死人不偿命的(3n+1)猜想 (15 分)
    北京周末去哪儿 —— 国家博物馆
    北京周末去哪儿 —— 天安门广场
    angular中使用ckplayer播放器
    java MD5/AES/DES加解密汇总
  • 原文地址:https://www.cnblogs.com/NiBosS/p/11960123.html
Copyright © 2020-2023  润新知