String类(系统类)

字符串:在java中将与字符串有关的内容面向对象了,形成的类叫String,字符串表示的方法--""

分两类:对字符串的处理是可变还是不可变的,和地址无关
对于字符串整体有两个地方可能会发生变化:1.引用的指向 2.字符串本身
1.不可变字符:String:说的是字符串本身没有变化,与引用无关(这里的意思是不管引用指向哪个地方,String类型的本身一定不变,只是没有引用来指向,原本的引用指向变了)
2.可变字符串:StringBuffer/StringBuilder:说的是字符串本身发生了变化,与引用无关

字符串常量(不可变字符串)的保存位置:被放在了常量区,可以认为在堆中的一块特殊区域
变量的特点:同一个名字的字符串在内存中只允许存在一个

    String s1 = "1000phone";
    String s2 = "1000phone";
    String s3 = new String("1000phone");
    String s4 = new String("1000phone");
    
    System.out.println(s1==s2);//true
    System.out.println(s1==s3);//false
    System.out.println(s1==s4);//false

原理:
(1)如果不可变字符串后面直接赋值,其工作原理是,会到常量区找叫1000phone的字符串,如果有直接保存他的赋值,如果没有才会在常量区开辟一块空间存储1000phone
(2)如果是new的话,就是在堆区单独开辟一块空间,而1000phone作为参数传给了对象,保存在了对象内一个String类型的成员变量里面

注意点:字符串的比较用equals方法,因为字符串自动重写了equals方法,重新定义了比较的规则,规则变成让s1和s3的内容(保存1000phone地址的常量)去比较
System.out.println(s1.equals(s2));//true System.out.println(s1.equals(s3));//true,String类中自动重写了,是拿对象里面保存的指向常量的地址和直接指向常量的地址进行比较

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 RTFSC (Read the fucking source code )才是生活中最重要的。我们天天就是要...
    二毛_coder阅读 474评论 1 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,826评论 18 399
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,907评论 2 9
  • 有人曾说:“蔡澜吃得随性,汪曾祺吃得深刻,梁实秋吃得理性。”梁实秋的理性或许是体现在对身体的爱惜便将好吃之物忌口了...
    X的次元人生阅读 914评论 0 1
  • ~~ 连日的阴雨时急时汹的不曾断停 雨幕遮了天际而无休无止的涌动 淅淅沥沥或狂野或悄静如挥如洒 洗微尘侵其所有的倾...
    泊舟静阅读 163评论 0 0