Java基础教程(4)-Java中的操作符

举报
厨师之乡 发表于 2024/04/08 20:05:06 2024/04/08
【摘要】 字符串String字符串是java程序中最常用的一个类;在Java中,字符和字符串是两个不同的类型字符串类型 String 是引用类型,Java将字符串作为String类型对象来处理,用双引号 “…” 表示字符串。理论上一个字符串可以存储0个到任意个字符;但实际上:字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过 65535,并且在javac 执行过程中控制了最大值为 6553...

字符串String

字符串是java程序中最常用的一个类;

在Java中,字符和字符串是两个不同的类型

字符串类型 String 是引用类型,Java将字符串作为String类型对象来处理,用双引号 “…” 表示字符串。理论上一个字符串可以存储0个到任意个字符;

但实际上:字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过 65535,并且在javac 执行过程中控制了最大值为 65534。在运行期,长度不能超过 Int 的范围,否则会抛异常;
<参考网上的关于JVM常量池相关的文章>

字符串是不可变的

当创建一个String对象时,被创建的字符串是不能被改变的。这也就是说一旦一个String对象被创建,将无法改变那些组成字符串的字符。

String 类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。

如果需要一个可修改的字符串,应该使用 StringBuffer 或者 StringBuilder。否则会有大量时间浪费在垃圾回收上,因为每次试图修改都有新的 string 对象被创建出来。

构造方法

默认构造函数:创建空String的构造函数

String str = new String();

String类支持多种构造函数。如下:

 		
        String s1 = new String("ad");
        String s2 = new String(new char[]{b,c})
        System.out.println(s1);
        System.out.println(s2);

全部构造方法可以查看源码:
在这里插入图片描述

字符串的方法:

String类包括了50多个用于操作字符串的方法。大多数都会用到;如

  • 获取字符串的长度:字符串的长度是指其所包含的字符的个数。调用如下的length( )方法可以得到这个值;

String s1 = new String(“ad”);
s1.length();

  • 提取子串:substring(int start,int end) 从一个较大的字符串提前子串
    在这里插入图片描述

  • Java 中常用的替换字符的方法:replace、replaceAll 和 replaceFirst

replace(CharSequence target, CharSequence replacement) ,用replacement 替换所有的 target,两个参数都是字符串。

replaceAll(String regex, String replacement) ,用 replacement 替换所有的regex 匹配项,regex 很明显是个正则表达式,replacement是字符串。

replaceFirst(String regex, String replacement) ,基本和 replaceAll 相同,区别是只替换第一个匹配项

  • 字符串比较:equals( )和 equalsIgnoreCase( )

如果两个字符串具有相同的字符和长度,它返回true,否则返回false。这种比较是区分大小写的。为了执行忽略大小写的比较,可以调用equalsIgnoreCase( )方法。当比较两个字符串时,它会认为A-Z和a-z是一样的。

  • 搜索字符串 ·

indexOf( ) 搜索字符或子字符串首次出现。
lastIndexOf( ) 搜索字符或子字符串的最后一次出现。

  • 特殊的字符串操作

对于程序中的每一个字符串常量,Java会自动创建String对象。因此,可以使用字符串常量初始化String对象;

String str = “abc”;

由于对应每一个字符串常量,有一String对象被创建,因此在使用字符串文字的任何地方,都可以使用String对象。

通常,Java不允许对String对象进行操作; Java的编译器对字符串做了特殊照顾,可以使用 + 连接任意字符串和其他数据类型;

字符串连接的一个实际使用是当创建一个很长的字符串时,可以将它拆开,使用+将它们连接起来,避免源代码中长字符串的换行

字符串可以和其他类型的数据连接;只要+运算符的一个运算数是字符串(String)实例,编译器就将另一个运算数转换为它的字符串形式。

当Java在连接时将数据转换为其字符串形式时,它是通过调用一个由字符串(String)定义的字符串转换方法valueOf( )的重载来完成的。valueOf( )方法对所有简单的类型和类型Object重载。对于简单类型,valueOf( )方法返回一个字符串,该字符串包含了相应其被调
用的值的可读值。对于对象,valueOf( )方法调用toString( )方法。

定义字符串变量的 StringBuffer 和StringBuilder

Java 中除了定义了一个可以用来定义字符串常量的 String 类以外,还提供了可以用来定义字符串变量的 StringBuffer 类,它的对象是可以扩充和修改的。除了 StringBuffer 以外,还有一个类 StringBuilder 也可以使用,其用法和StringBuffer 类似。

StringBuffer是提供了大量的字符串功能的字符串(String)类的对等类。StringBuffer可有插入其中或追加其后的字符或子字符串。StringBuffer可以针对这些添加自动地增加空间,同时它通常还有比实际需要更多的预留字符,从而允许增加空间。

StringBuffer定义了下面三个构造函数:

  • StringBuffer( )
  • StringBuffer(int size)
  • StringBuffer(String str)

最常用的方法append()

append( )方法将任一其他类型数据的字符串形式连接到调用StringBuffer对象的后面。对所有内置的类型和Object,它都有重载形式。

  • StringBuffer append(String str)
  • StringBuffer append(int num)
  • StringBuffer append(Object obj)

每个参数调用String.valueOf( )方法获得其字符串表达式。结果追加在当前StringBuffer对象后面。对每一种append( )形式,返回缓冲区本身。

null值和空字符串
  • 引用类型的变量可以指向一个空值 null ,它表示不存在,即该变量不指向任何对象。
  • 空字符串是一个有效的字符串对象,它不等于 null

字符串池

在 JVM 中,为了减少相同的字符串的重复创建,为了达到节省内存的目的。会单独开辟一块内存,用于保存字符串常量,这个内存区域被叫做字符串常量池。

当代码中出现双引号形式(字面量)创建字符串对象时,JVM 会先对这个字符串进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回;否则,创建新的字符串对象,然后将这个引用放入字符串常量池,并返回该引用。

这种机制,就是字符串驻留或池化

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。