• 第二十三节(String,StringBuffer,基础类型对应的 8 个包装类,日期相关类、 Random 数字 ,Enum枚举)下


    /*
        java.lang.String 是字符串类型
        
        注意:只要采用双引号赋值字符串,那么在编译期将会放到方法区中的字符串的常量池里, 
                如果是运行时对字符串.加或相减会放到堆中(放之前会先验证方法区中是否含有
                相同的字符串常量,如果存在,把地址返回,如果不存在,先将字符串常量放到池中,然
                后再返回该对象的地址
        
    */
    public class StringTest01{
    
        // java的入口
        public static void main(String[] args){
            
            // 创建一个“abc”字符串对象,该对象的内存地址,让a1变量来保存
            // a1 是一个引用,a指向“abc”对象
            String a1 = "abc";
            
            // a1是一个局部变量,a1前边没有final,所以a1可以重新指向
            // 但是 "abcd" 字符串本身是不可变
            a1 = "abcd";
            
            System.out.println("字符串为:"+a1);
            
            String a2 = "Ming"; // 在字符串常量池中新建一个“Arry”字符串对象,该对象是不可变的
            String a3 = "Ming"; // 从字符串常量池中直接拿来用
            
            System.out.println(a2 == a3);  // true
            
            // 比较两个字符串是否相等,不能用“==”,
            String a4 = new String("ming");
            String a5 = new String("ming");
        
            System.out.println(a4 == a5); // 
            
            // 比较两个字符串是否一致,必须使用String类型提供的equals方法
            System.out.println(a4.equals(a5)); // true
            
            
            String s1 = "a";
            
            String s2 = "b";
            
            s1 = s1 + s2
        
        }
    }
    /*
        普通字符串的声明和创建字符串对象的区别
        
            1. String a1 = "arry"; 只会在字符串常量池中创建一个“arry”字符串对象
            2. String a2 = new String("arry"); 会在字符串的常量池中创建一个“arry”字符串对象
            并且会在堆中再创建一个字符串对象
            
            第二种 方式比较浪费内存,常用第一种方式
    
    */
    public class StringTest02{
    
        public static void main(String[] args){
            
            String a1 = "ming";
            
            String a2 = new String("ming");
            
        }
        
    }
    /*
        面试题:
            String a1 = new String("ming");
            String a2 = new String("ming");
            
            以上代码 创建了几个对象?    
            
            
    */
    public class StringTest03{
        
        public static void main(String[] args){
            
            String a1 = new String("ming");
            String a2 = new String("ming");
            
            /*
                通过图形分析:
                
                    1、 创建了3个对象,堆区中2个对象,常量池中1个
                    
                    建议:使用String的时候不建议使用new关键字,因为它会创建两个对象
                    
                    总结: 堆区中 试运行期分配的,常量池中是编译期分配的
            
            */
            
        }
    
    }
    /*
        使用String的时候注意的问题:
        
            尽量不要频繁的拼接操作,因为字符串一旦创建不可改变,只要频繁拼接,
            就会在字符串常量池中创建大量的字符串对象,给垃圾回收带来问题
    
    */
    public class StringTest04{
        
        public static void main(String[] args){
            
            String[] s = {"sport","music","food","sleep"};
            
            //  需求: 将所有的兴趣爱好拼接成字符串“sport,music,food,sleep”;
            
            String temp = "";
            for(int i = 0; i < s.length; i++){
                if(i == s.length-1){
                    temp += s[i];
                } else {
                    temp += s[i]+",";
                }
            }
            
            System.out.println("拼接好的字符串:"+temp);
            
        }
    
    }
    /*
        字符串常用的构造方法
    
    */
    public class StringTest05{
        
        public static void main(String[] args){
        
            String a1 = "ming";
            
            String a2 = new String("ming");
            
            byte[] bytes = {1,2,3,4};
            String a3 = new String(bytes);
            System.out.println(a3);
            
            
            String  a4 = new String(bytes,1,2);
            System.out.println(a4);
            
            char[] a5 = {'','','A'};
            String s = new String(a5);
            System.out.println(s);
            
            // 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
            String a6 = new String(a5,2,1);
            System.out.println(a6);
            
            
        }
    
    }
  • 相关阅读:
    Qt Qaction和触发函数建立连接的方法
    Qt QChart缩放后坐标轴间隔取整
    Qt 编译时报错“退出,退出代码2”的原因
    Qt Qchart 中清空绘图
    Qt QChartView 如何放入widget
    Qt QChart之曲线图,饼状图,条形图使用
    Qt 实现控件不响应鼠标点击事件
    Qt css样式大全(整理版)
    Qt 加载qss文件
    Qt 如何处理密集型耗时的事情(频繁调用QApplication::processEvents)
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/4232450.html
Copyright © 2020-2023  润新知