zoukankan      html  css  js  c++  java
  • 浅层了解String——Java面向对象基础(13)

    一、两种创建字符串类型的方法

            String str1="Iloveyou";//str1变量值为地址值(这里存疑吧,目前水平还不够,貌似Java中是哈希码),字符串放入String常量池,不开辟新空间
            String str2=new String("Iloveyou");//str2变量为地址值(同样存疑),字符串放入堆,开辟新空间

    二、几种经典场景判断

            String str0="Iloveyou";
            String str1="Iloveyou";
            System.out.println(str0=="Iloveyou");
            //相等,因为str0与其都引用自常量池中同一个字符串
            System.out.println(str0==str1);
            //相等,因为str0与str1都引用自常量池中同一个字符串    
            String str2="Iloveyou";
            String str3=new String("Iloveyou");
            System.out.println(str2==str3);
            //不相等,因为str2是引用自常量池的字符串,而str3中是引用堆中开辟的新空间
            String str4=new String("Iloveyou");
            String str5=new String("Iloveyou");
            System.out.println(str4==str5);
            //不相等,因为str4与str5中是引用堆中开辟的不同的新空间,即他们是不同的对象
            String str6="Ilove"+"you";
            System.out.println(str6=="Iloveyou");
            //相等,因为编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"Iloveyou"。
            //str6引用的是常量池里的字符串,并没有在堆中开辟一块新的空间。
            String str7="Ilove";
            str7=str7+"you";
            System.out.println(str7=="Iloveyou");
            //不相等,str7=str7+"you"会导致开辟新的堆空间,str7也不再指向常量池,而是转而指向堆区。
            String s1="Ilove";
            String s2="you";
            String str8=s1+s2;
            System.out.println(str8=="Iloveyou");
            //不相等,s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象,str6指向新开辟的堆区
            //从而与常量池中的Iloveyou不同
            String str9="Iloveyou".substring(0,2);
            System.out.println(str9=="Il");
            //不相等,"Iloveyou".substring(0,2)会生成一个新的String对象,然后str9指向它,而非常量池中。
            String str10="Iloveyou".toUpperCase();
            System.out.println(str9=="ILOVEYOU");
            //不相等,"Iloveyou".toUpperCase()会生成一个新的String对象,然后str9指向它,而非常量池中。
  • 相关阅读:
    centos 添加 composer
    laravel5 缓存的使用
    git 的使用
    php 消息队列 rabbitmq 的安装使用
    vue插件大汇总
    vue 2.0 Gzip打包压缩
    Easy Mock 为啥那么打不开了?
    element ui 打印 表格
    解决 element 日期范围选择问题(只能选择相邻的 连两个月)
    vue router 的路由传参 params 和 query 的 区别
  • 原文地址:https://www.cnblogs.com/Unlimited-Rain/p/12470547.html
Copyright © 2011-2022 走看看