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

     

  • 相关阅读:
    Linux dd 命令
    excel合并单元格数据读取
    判断字符串是否以中文字符开头
    列表嵌套字典去重统计
    【转载】【DBDK】dpdk大页内存原理
    【LinuxShell】ps 命令浅析
    【LinuxShell】free 命令详解
    【网络安全】IOC概念浅析
    【转载】【网络安全】渗透中 PoC、Exp、Payload 与 Shellcode 的区别
    【SVN】windows 下的SVN常见问题及其解决方法
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12190050.html
Copyright © 2011-2022 走看看