zoukankan      html  css  js  c++  java
  • Java连载72-String类详解、多个构造方法

    一、String类

    1.String类是不可以变类,也就是说String对象声明后

    2.java.lang.String;是字符串类型

    (1)字符串一旦创建不可再改变,“abc”字符串对象一旦创建,不可在改变成“abcd”。

    (2)提升字符串的访问效率:在程序中使用了“缓存”技术,所以在java中所有使用“双引号”括起来的字符串,都会在“字符串常量池“中创建一份,字符串常量池在方法区中存储。

    (3)在程序执行过程中,如果程序用到某个字符串,例如:”abc“,那么程序会在字符串常量池中去搜索该字符串,如果没有找到这个字符串则在字符串常量池中新建一个”abc“字符串,如果找到就直接拿过来用。(字符串常量池是一个缓存区,为了提高访问字符串的效率)。

    (4)使用Sting的时候​,应该注意的问题:尽量不要做字符串频繁的拼接操作,因为字符串一旦创建就不可以改变了,只要频繁的拼接,就会在字符串常量池中​创建大量的字符串对象,给垃圾回收带来问题。

    package com.bjpowernode.java_learning;
    
    ​
    
    public class D72_1_StringClassAnlysis {
    
      public static void main(String[] args) {
    
        //创建一个“abc”字符串对象,该对象的内存地址,让s1变量保存。
    
        //s1是一个引用,s1指向“abc”对象
    
        String s ="abc";
    
        //可以让s1重新指向吗?s1是局部变量,s1前面是没有final,所以s1是可以重新指向的。
    
        //但是"def"字符串本身是不可以变的。
    
        String s1 = "雄安";
    
        String s2 = "雄安";
    
        System.out.println(s1==s2);
    
        System.out.println(s1.equals(s2));
    
        //比较两个字符串的值,不能用双等号,要使用函数.equals,双等号比较的是内存地址
    
        //如果字符串是new出来的,那么内存地址就肯定不相等了,这个了例子也证明了
    
        //直接使用字符串的话,那么就是存储在了方法区的字符串常量池
    
        String s3 = new String("雄安");
    
        String s4 = new String("雄安");
    
        System.out.println(s3==s4);
    
        System.out.println(s3.equals(s4));
    
       
    
        System.out.println(s1==s3);
    
        System.out.println(s1.equals(s3));
    
       
    
       
    
        //题解:以下程序创建了三个对象,两个在堆内存,一个在方法区内存
    
        String s5 = new String("abc");
    
        String s6 = new String("abc");
    
       
    
        String[] ins = {"sport","music","food","sleep"};
    
        //要求将上面的兴趣爱好拼接成一个字符串
    
        String temp = null;
    
        for(int i=0;i<ins.length;i++) {
    
          if(i==ins.length-1) {
    
            temp += ins[i];
    
          }else {
    
            temp += ins[i]+",";
    
          }
    
        }
    
        System.out.println(temp);
    
        //不推荐这样做因为做了大量拼接,方法区创建了很多字符串
    
       
    
      }
    
    }

    二、字符串常用构造方法

    package com.bjpowernode.java_learning;
    
    ​
    
    public class D72_2_StringCommonMethod {
    
      public static void main(String[] args) {
    
        //常用的构造方法
    
        String s1 = "abc";
    
        String s2 = new String("abc");
    
        byte[] bytes = {97,98,99,100};
    
        String s3 = new String(bytes);
    
        System.out.println(s3);//从输出结果可以看出,String已经重写了Object中的toString
    
       
    
        String s4 = new String(bytes,0,2);//第二个参数是开始位置,第三个参数是长度
    
        System.out.println(s4);
    
       
    
        char[] c1 = {'我','是','中','国','人'};
    
        String s5 = new String(c1);
    
        System.out.println(s5);
    
       
    
        String s6 = new String (c1,2,2);
    
        System.out.println(s6);
    
       
    
      }
    
    }
    
    ​

    三、源码:                                           

    D72_1_StringClassAnlysis.java

    D72_2_StringCommonMethod.java

    https://github.com/ruigege66/Java/blob/master/D72_1_StringClassAnlysis.java

    https://github.com/ruigege66/Java/blob/master/D72_2_StringCommonMethod.java

    2.CSDN:https://blog.csdn.net/weixin_44630050

    3.博客园:https://www.cnblogs.com/ruigege0000/

    4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

     

  • 相关阅读:
    poj 2312 Battle City
    poj 2002 Squares
    poj 3641 Pseudoprime numbers
    poj 3580 SuperMemo
    poj 3281 Dining
    poj 3259 Wormholes
    poj 3080 Blue Jeans
    poj 3070 Fibonacci
    poj 2887 Big String
    poj 2631 Roads in the North
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12190050.html
Copyright © 2011-2022 走看看