java基础入门第15天

 Java.lang.String类的使用

1.概述:

String:字符串,使用 一对 “”引起来表示

  1. String声明为final的,不可被继承
  2. String实现了Serializable接口:表示字符串是支持序列化的
  3. String实现了Comparable接口:表示String可以比较大小
  4. String 内部定义了final  char[] value用于存储字符串数据
  5. 通过字面量的 方式(区别于new给一个字符串赋值,此时的字符串值声明在字符串常量池中。)
  6. 字符串常量池中是不会存储相同内容(使用String类的equals()比较,返回true)的字符串的

说明:

在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素以及像数组、记录和对象等复合类型的值也支持字面量表示法。
--百度百科

有个不太好,但是足以说明问题的解释,那就是 对象字面量就是引号引起来的部分,必须是等号右边的部分。虽然这样的解释不太好,但是确实如此,这就是字面量。

2.String的不可变性

说明:

  1. 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
  2. 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
  3. 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值

代码举例:

        String s1 = "abc";字面量的定义方式

        String s2 = "abc";

        s1 = "hello";

        System.out.println(s1 == s2);//比较s1和s2的地址值

        System.out.println(s1);//hello

        System.out.println(s2);//abc

        System.out.println("******************");

        String s3 = "abc";

        s3 += "def";

       System.out.println(s3);//abcdef

      System.out.println(s2);

        System.out.println("******************");

        String s4 = "abc";

        String s5 = s4.replace(oldChar:'a',newChar'm');

        System.out.println(s4);//abc

         System.out.println(s5);//mbc

图示:

3.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

面试题 :

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

        两个:一个 是对空间中new结构,另外一个是 char【】对应的常量池中的 数据:"abc"

图示:

4.字符串拼接方式赋值的对比

说明:

  1. 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量
  2. 只要其中一个是变量,结果就在堆中
  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 == 6);//false

System.out.println(s5 == s7);//false

System.out.println(s6 == s7);//false

String s8 = s6.inter();//返回值得到的s8使用的 常量值中已经存在的"javaEEhadoop"

System.out.println(s3 == s8);true

************************************

String s1 = "javaEEHadoop";

String s2 = "javaEE";

String s3 = s2 + "Hadoop";

System.out.println(s1 == s3);//false

final String s4 = "javaEE";//s4:常量

String s5 = s4 + "hadoop";

system.out.println(s1 = s5);//true

常用方法:

int length():返回字符串的长度:return value.length

char charAt(int index):返回某 索引处的 字符串return value【index】

boolean isEmpty():判断是否是空 字符串:return value.length == 0

String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写

String toUpperCase():使用默认语言黄金,将String中的所有字符转换为大写

String trim():返回字符串的副本,忽略前导空白和尾部空白

boolean equals(Object obj): 比较字符串的内容是否相同

boolean equalsIgnoreCase(String anotherString): 与equals方法类似,忽略大小写

String concat(String str):将指定的字符串连接到此字符串的结尾。等价于 "+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值