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

简介: 【4月更文挑战第4天】Java中的String是常用类,字符串是不可变对象,用双引号表示。String对象在编译期长度受限于65535,运行期不超过Int范围。字符串方法如length()、substring()、replace()、equals()等提供了多种操作。可变字符串可使用StringBuffer或StringBuilder。String对象通过字符串池优化内存,池中已有相同内容字符串则返回其引用。

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

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

相关文章
|
2天前
|
SQL 安全 Java
「滚雪球学Java」教程导航帖(更新2024.07.16)
《滚雪球学Spring Boot》是一个面向初学者的Spring Boot教程,旨在帮助读者快速入门Spring Boot开发。本专通过深入浅出的方式,将Spring Boot开发中的核心概念、基础知识、实战技巧等内容系统地讲解,同时还提供了大量实际的案例,让读者能够快速掌握实用的Spring Boot开发技能。本书的特点在于注重实践,通过实例学习的方式激发读者的学习兴趣和动力,并引导读者逐步掌握Spring Boot开发的实际应用。
15 1
「滚雪球学Java」教程导航帖(更新2024.07.16)
|
1天前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
13 2
|
2天前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
13 3
|
4天前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
18 5
|
7天前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
25 6
|
5天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
13 2
|
6天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
【7月更文挑战第11天】页面对象模型(POM)通过Page Factory在Java Selenium测试中被应用,简化了代码维护。在POM中,每个网页对应一个Page Class,其中包含页面元素和相关操作。对比之下,非POM实现直接在测试脚本中处理元素定位和交互,代码可读性和可维护性较低。
|
Java
java基础之基本操作符的使用(下)
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。
110 0
java基础之基本操作符的使用(下)
|
Java
java基础之基本操作符的使用(上)
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。
101 0
java基础之基本操作符的使用(上)
|
7天前
|
Java 调度
Java线程的六种状态
Java线程有六种状态: 初始(NEW)、运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)。
23 1