正确使用String类的几点注意

如何用SoulChat2.0快速克隆你的心理咨询师?手把手教你搭建AI数字孪生体 本文详细介绍了如何利用SoulChat2.0框架快速构建心理咨询师的AI数字孪生体。通过其核心PsyDT技术,仅需少量真实案例即可合成风格数据并微调大模型,从而低成本地创建能高度模仿特定咨询师语言风格和专业技术的AI分身,适用于预约访谈、心理教育等辅助场景,实现高效的人机协作。 阅读详情
  java.lang.String类对大家来说最熟悉不过了,我们写java程序很少能不用String的。本文讲述如何正确的使用String,内容主要涉及初始化、串联和比较等操作。

    首先我们必须清楚的一点是String类是final类型的,因此你不可以继承这个类、不能修改这个类。我们使用String的时候非常简单,通常都是String s = "hello",但是Java API中同时提供了一个构造函数为String(String s),因此你也可以这样使用String s = new String("hello"),对于后面这样初始化一个String的方式是不推荐的,因为new操作符意味着将会在heap上生成一个新的对象,如果这样的操作发生在一个循环中,那么代价是惨重的。比如
for(int i = 0;i<1000;i++)
{
    String s = new String("hello");
}
这将会创建1000个String类型的对象,由于String类是final的,因此这样的操作事实上是每次都生成了一个新的String对象的。如果你使用String s = "hello";那么就可以实现复用了,为什么可以复用呢,下面会有解释。

    当我们使用"+"实现串联操作的时候,比如String s = "hello"+"world";其实是通过StringBuffer类的append()方法实现的,最后返回String给s。如果有兴趣的话,你可以写一个简单的例子,然后用javap看看虚拟机是如何工作的。在使用串联的时候我们同样应该注意String是final类,如果你需要多次串联比如:
String sql = "xxx";
sql = "xxxx";
sql = "ssssss";
那么为了提高效率节省空间,我们应该自己用StringBuffer来替代"+";

    通常对String的比较有两种情况,一个是使用==,另一个是使用equals()方法,注意==是对对象的地址进行比较的,而String中的equals()方法是覆盖了Object类的方法,并且实现为对String对象的内容的比较。所以String s1 = new String("hello");String s2 = new String("hello"),我们对s1和s2进行上述比较的时候,前者应该返回false,因为使用new生成的是两个不同的对象。后者应该返回true因为他们的内容是一样的,都是"hello"。那么如果我们还有一个String s3 = "hello";他和s1的比较应该是什么样子的呢,答案是s1==s3为false,equals的比较位true。事实上String类是维持着一个String池的,这个池初始化为空的,当我们String x = "hello"的时候,hello就会被放入这个池中,当我们再次String y = "hello"的时候,他首先去检查池中是否存在一个和hello内容一样的对象,如果存在的话就会把这个引用返回给y,如果不存在的话,就会创建一个并放入到池中。这样就实现了复用。在String有一个方法intern()他可以把String的对象放入到池冲并返回池中的对象。如果我们对s1(String s1 = new String("hello"))调用intern,s1 = s1.intern()这时候,我们再把s1和s3进行“==”的判断,你会发现结果返回true!
看下面的例子

public class StringTest
{

    public static void main(String[] args)
    {
        String s1 = "hello";
        String s2 = new String("hello");
        String s3 = new String("hello");
       
        testString(s1,s2,s3);
        s2 = s2.intern();
        System.out.println("after s2.intern");
        testString(s1,s2,s3);
       
       

    }
   
    private static void testString(String s1,String s2,String s3)
    {
        System.out.println("s1 = s2 is "+(s1==s2));
        System.out.println("s2 = s3 is "+(s2==s3));
        System.out.println("s1.equals(s2) is "+s1.equals(s2));
        System.out.println("s2.equals(s3) is "+s2.equals(s3));
    }
}
输出结果为
s1 = s2 is false
s2 = s3 is false
s1.equals(s2) is true
s2.equals(s3) is true
after s2.intern
s1 = s2 is true
s2 = s3 is false
s1.equals(s2) is true
s2.equals(s3) is true

315、弱电基础知识介绍 常见的弱电系统包括:闭路电视监控系统、防盗报警系统、门禁系统、电子巡更系统、停车场管理系统、可视对讲系统、家庭智能化系统及安防系统、背景音乐系 统、LED显示系统、等离子拼接屏系统、DLP大屏系统、三表抄送系统、楼宇自控系统、防雷与接地系统、寻呼对讲及专业对讲系统、弱电管道系统、UPS不 间断电源系统、机房系统、综合布线系统、计算机局域网系统、物业管理系统、多功能会议室系统、有线电视系统、卫星电视系统、卫星通讯系统、消防系统、电话 通讯系统、酒店管理系统、视频点播系统、人力资源管理系统等等。 阅读详情

相关推荐

Python-uiautomator2保姆级安装指南:从环境配置到设备连接全流程

本文提供Python-uiautomator2的保姆级安装指南,涵盖从环境配置到设备连接的全流程。详细介绍了Python 3.6+、ADB工具等核心组件的准备,以及uiautomator2的安装和设备端服务初始化步骤,帮助开发者快速搭建Android自动化测试环境,避免常见问题。

nnn11的博客 940

深入剖析Java中的输入输出流:InputStream与OutputStream的精髓解读

在计算机编程领域,文件和数据的输入输出是开发中常见的需求。Java作为一门强大的编程语言,提供了丰富的输入输出流(IO)操作功能,使得开发者可以轻松地处理各种数据源,包括文件、网络连接、内存等。本文将深入探讨Java中的输入输出流,着重介绍InputStream和OutputStream的原理、使用方法以及常见应用场景,帮助读者更好地理解和运用Java中的IO操作。希望通过本文的介绍,读者能够更好地掌握Java中InputStream与OutputStream的使用,为今后的开发工作提供有力支持。

程序猿小样的博客 1990

STM32单片机:驱动ADS1115四个通道全开程序

本文介绍了德州仪器(TI)的ADS1115高精度16位模数转换器(ADC)及其应用实现。该芯片具有16位分辨率、可编程增益放大器(PGA)和低功耗特性,支持±0.256V至±6.144V量程。文章提供了完整的C语言驱动代码,包括初始化、配置寄存器读写、单次/连续转换模式设置、电压值读取等功能实现。代码通过I2C接口与ADS1115通信,支持多通道选择和不同PGA设置,可实现高精度模拟信号采集。该方案适用于需要精密测量的嵌入式系统,如传感器数据采集等应用场景。

weixin_42122070的博客 691

InputStream的了解与使用

InputStream 是一个字节输入流的抽象类,常用到的实现类有: 1. BufferedInputStream 2. ByteArrayInputStream 字节数组输入流 3. DataInputStream 4. FilterInputStream 5. PushbackInputStream 6. FileInputStream 文件输入流

weixin_54227075的博客 1384

飞常准小程序接口逆向分析:如何破解航班查询的签名机制

本文深度解析了飞常准小程序航班查询接口的安全机制,重点剖析了其基于MD5和参数排序的签名算法。通过逆向分析核心代码,详细阐述了签名生成流程,并提供了Python实现的签名生成器与调试技巧,为开发者理解与模拟此类接口调用提供了实战指南。

zz67890的博客 536

基于QT的华为网络摄像头二次开发

第一次使用华为的网络摄像头并进行二次开发,网上关于QT对华为网络摄像头的二次开发的文章很少,基于项目的需求做了一些工作,特此记录。 目标: 1、实时预览 2、手动控制录制视频 3、监听告警型号 4、实时获取元数据中的划定区域内的人数 摄像头型号如下: 准备工作: 在购买摄像头后,应当在官网下载对应的开发资料,如果需要权限,则联系华为的技术支持人员。下载资料如下: SDC Development Kit Demo 8.0.T9 SDK DEMO下载地址:https://bbs.hua

xumingyifrend的博客 3170

操作系统——File类和InputStream,OutputStream类详解

File类和InputStream, OutputStream类

xh1605004242的博客 5541

allegro 约束管理Constraint Manager(一)

介绍Cadence allegro 约束管理器CM的使用方法。

weixin_38975819的博客 8726

InputStream抽象类的三种实现

文件IO这块可能很多开发者没有涉及,平时的工作主要集中在CRUD的业务逻辑开发上,对于金融或者电信有些核心系统会大量使用文件IO。这里的文件主要是话单或者交易凭证,开发者需要读取这些文件,将文件的内容转为实体或者消息发送给其他的子系统去处理。大家常用的读取和写入文件的方式是用FileInputStream和FileOutputStream,本文将为大家带来另外两种文件读取的方式,让大家在写代码的时候有跟多的选择。 InputStream是文件读取的抽象基类,java.io包下的文件读取都会直接或者间接实现.

Discovery的专栏 1379

利用ANSYS随机振动分析功能实现随机疲劳分析

本文介绍了ANSYS随机振动分析功能,以及利用该功能,按照Steinberg提出的基于高斯分布和Miner线性累计损伤定律的三区间法进行ANSYS随机疲劳计算的具体过程。在工程应用中,汽车、飞行器、船舶以及其它各种机械或零部件,大多是在随机载荷作用下工作,当它们承受的应力水平较高,工作达到一定时间后,经常会突然发生随机疲劳破坏,往往造成灾难性的后果。因此,预测结构或零部件的随机疲劳寿命是非常有必要的。在工程界,疲劳计算广泛采用名义应力法,即以S-N曲线为依据进行寿命估算的方法,可以直接得到总寿命。

qq_38220914的博客 7614

【AI智能体】基于OpenCode 搭建Skills环境与项目实战开发详解

基于OpenCode 搭建Skills环境与项目实战开发详解

congge 8903

Java IO - 源码解析: InputStream

InputStream是一个抽象类,即表示所有字节输入流实现类的基类。它的作用就是抽象地表示所有从不同数据源产生输入的类,例如常见的FileInputStream、FilterInputStream等。二者,注意它是属于字节流部分,而不是字符流(java.io中Reader\Writer,下面会讲到)。4) 一个其他种类的流组成的序列化 (在分布式系统中常见)1) 字节数组(不代表String类,但可以转换)借用客官你们发财的小手,给个鼓励吧。5) 管道(多线程环境中的数据源)2) String对象。

Liarboy 2752

【HAL库】STM32CubeMX开发----STM32F407----SPI实验

【HAL库】STM32CubeMX开发----STM32F407----SPI实验

MQ0522的博客 3020

正确使用String类应注意的几点

java.lang.String类对大家来说最熟悉不过了,我们写java程序很少能不用String的。本文讲述如何正确的使用String,内容主要涉及初始化、串联和比较等操作。 首先我们必须清楚的一点是String类是final类型的,因此你不可以继承这个类、不能修改这

familyGo的专栏 409

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

正确使用String类的几点注意 (转载 只做学习之用)

java.lang.String类对大家来说最熟悉不过了,我们写java程序很少能不用String的。本文讲述如何正确的使用String,内容主要涉及初始化、串联和比较等操作。     首先我们必须清楚的一点是String类是final类型的,因此你不可以继承这个类、不能修改这个类。我们使用String的时候非常简单,通常都是String s = "hello",但是Java API中同时提供了一

keysun的专栏 1121

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

正确使用String类应注意的几点!

java.lang.String类对大家来说最熟悉不过了,我们写java程序很少能不用String的。本文讲述如何正确的使用String,内容主要涉及初始化、串联和比较等操作。 首先我们必须清楚的一点是String类是final类型的,因此你不可以继承这个类、不能修改这个类。我们使用String的时候非常简单,通常都是String s = "hello",但是Java API中同时提供...

flying 237

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STL:String类的使用

能不能把string封装成一个类,把它像顺序表一样管理起来,给他增设一些常用的比如增删查改的函数接口?针对扩容进行检查?利用构造函数和析构函数帮助我们管理内存呢??因而我们的string类就诞生了!!

weixin_51142926的博客 3590

【C++】认识使用string类

介绍了string类,以及string的相关函数

dab112的博客 2258

【C++】—— string 类的了解与使用

C++ —— string 类

yusjushd的博客 4147

string类的介绍与使用【C++】

string类是编程语言中用于表示和操作字符串的基本数据类型或类。它提供了一系列方法和操作,允许开发者对字符串进行创建、修改、查找、比较、转换等。string类通常具有不可变性,意味着一旦创建了字符串对象,其内容就不能被修改,但可以创建新的字符串对象来表示修改后的内容。这种特性有助于在多线程环境中保持数据的安全性。string类还提供了各种构造函数、操作符重载和格式化功能,使字符串操作更加灵活和高效。

qq_74013365的博客 3512

【C++】string类的使用

在前面我们说过,前面的绝大部分内容都是在为了后面真正进入C++这块大门做铺垫,今天我们将正式的步入。

m0_64826370的博客 2263

string类

string类

m0_69323023的博客 549

【C++进阶篇】——string类的使用

是 C++ 标准库的一部分,但它不是 STL 容器的一部分。STL 容器是指那些基于模板的容器,如std::list等。提供了类似于 STL 容器的功能,比如动态内存管理、迭代器支持等,但它的设计和实现是独立的。被归为 STL 是因为它具有类似于 STL 容器的特性和功能,尽管它在技术上并不属于 STL。这种归类更多是出于功能和使用上的相似性,而不是严格的分类。是 C++ 标准库中的一个类,它提供了一种方便的方式来创建、操作和处理字符串。

zoelinkailuo的博客 1848

String类的splite方法使用注意几点的地方

String splite()方法的使用注意点 博客分类: J2SE .在java.lang包中有String.split()方法,返回是一个数组  我在应用中用到一些,给大家总结一下,仅供大家参考:  1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");  2、如果用“|”作为分隔的话,必须

小熊波波的专栏 2192

C++ 之 String类详解

String小引string类常用接口常见构造容量操作访问操作修改操作string类非成员函数 小引 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP(面向对象)的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。 C++中就引入了String类,它可以看做是一个管理字符串的数据结构。...

giturtle's blog 1万+
上一篇: 扩展ClassLoader定制类装载器
下一篇: J2SE 5.0新特性之static import
mingjava
博客等级 码龄24年 68粉丝 114原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值