zoukankan      html  css  js  c++  java
  • 9.1String基本概念

    1:String的两种实例化的方式

    方式一:通过字面量定义的方试
    方式二:通过new+构造器的方式
    
    //此时s1和s2的数据JAVAEE声明在方法区中的字符串常量池中。
            String s1="JAVAEE";
            String s2="JAVAEE";
            //通过new+构造器的方试:此时的s3和s4保存的地址值,是数据在堆空间
            //中开辟空间以后对应的地址值
            String s3=new String("JAVAEE");
            String s4=new String("JAVAEE");
            System.out.println(s1==s2);//true
            System.out.println(s1==s3);//false
            System.out.println(s1==s4);//false
            System.out.println(s3==s4);//false
    
    
            System.out.println("*******************************");
            Person p1=new Person("Tom",12);
            Person p2=new Person("Tom",12);
            System.out.println(p1.name.equals(p2.name));//true
            System.out.println(p1.name==p2.name);//true  通过字面量的方式定义的“Tom”
    
            p1.name="Jerry";
            System.out.println(p2.name);//Tom
    

    2.字符串的特性

    1.String声明为final的,不可被继承
    2.String实现了Serializable接口:表示字符串是支持序列化的。
    实现了Comparable接口:表示String可以比较大小
    3.String内部定义了final char[] value用于存储字符串数据
    4.String:代表一个不可变的字符序列。简称:不可变性
    体现:
         1)当对字符串重新赋值时,需要重写指定的内存区域赋值,不能使用原有的value进行赋值。
         2)当对现有的字符串进行连接操作时,也需要重写指定内存区域进行赋值,不能在原有的value上进行赋值。
         3) 当调用String的replace()方法修改字符或者字符串,也需要重写指定内存区域进行赋值,不能在原有的value上进行赋值。
         5) 通过字面量的方式(区别与new)给字符串赋值,此时的字符串值声明在字符串常量池中。
         6) 字符串常量池中,不会存储相同内容的字符串的。
    

    问题:String s=new String("abc");方式创建对象,在内存中创建了几个对象?

    两个:一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:“abc"
    

    3.值的比对:

    1.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
    2.只要其中有一个是变量,结果就在堆中。除了被定义了final
    3.如果拼接的结果调用intern()方法,返回值就在常量池中
     String s1="javaEE";
            String s2="hadoop";
            String s3="javaEEhadoop";
            String s4="javaEE"+"hadoop";
            String s5=s1+"hadoop";
            String s6="javaEE"+s2;
            String s7=s1+s2;
    
            System.out.println(s3==s4);//true  这个是字面量 在常量池中
            System.out.println(s3==s5);//false  其他的都在堆中
            System.out.println(s3==s6);//false
            System.out.println(s3==s7);//false
            System.out.println(s5==s6);//false
            System.out.println(s5==s7);//false
            System.out.println(s6==s7);//false
    
            //如果拼接的结果调用intern()方法,返回值就在常量池中
            String s8=s5.intern();//返回值得到的s8使用的常量值中已经存在的”javaEEhadoop“
            System.out.println(s3==s8);//true
    
  • 相关阅读:
    【Qt开发】Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包
    【CUDA】CUDA框架介绍
    【CUDA】CUDA框架介绍
    【CUDA开发】CUDA从入门到精通
    【CUDA开发】CUDA从入门到精通
    【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
    【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
    【Qt开发】Qt控件之进度条
    【Qt开发】Qt控件之进度条
    【Qt开发】布局控件之间的间距设置
  • 原文地址:https://www.cnblogs.com/2719610441qqcom/p/14667513.html
Copyright © 2011-2022 走看看