前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础教程(4)-Java中的操作符

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

原创
作者头像
JQ实验室
修改2024-04-22 07:56:49
1290
修改2024-04-22 07:56:49
举报
文章被收录于专栏:java基础教程
字符串String

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

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

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

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

<参考网上的关于JVM常量池相关的文章>

字符串是不可变的

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

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

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

构造方法

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

String str = new String();

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

代码语言:java
复制
         

        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 会先对这个字符串进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回;否则,创建新的字符串对象,然后将这个引用放入字符串常量池,并返回该引用。

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

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符串String
  • 字符串是不可变的
    • 构造方法
      • 字符串的方法:
        • 定义字符串变量的 StringBuffer 和StringBuilder
          • null值和空字符串
          • 字符串池
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档