Java之旅(十)

news/2025/3/13 22:31:35/

Java 字符串

在Java中,字符串是一个非常重要的数据类型,它是由字符组成的序列。我们可以使用Java内置的String类来定义和操作字符串。

  • String 类
    • String 类是 final 的,意味着它不能被子类继承。
    • String 类实现了 Serializable 接口,意味着它可以序列化。
    • String 类实现了 Comparable 接口,意味着最好不要用‘==’来比较两个字符串是否相等,而应该用 compareTo() 方法去比较。
    • StringBuffer、StringBuilder 和 String 一样,都实现了 CharSequence 接口,所以它们仨属于近亲。由于 String 是不可变的,所以遇到字符串拼接的时候就可以考虑一下 String 的另外两个好兄弟,StringBuffer 和 StringBuilder,它俩是可变的。
    • 每一个字符串都会有一个 hash 值,这个哈希值在很大概率是不会重复的,因此 String 很适合来作为 HashMap 的键值。

以下是Java字符串的相关知识点、作用、操作方法、注意点以及学习建议。

1、常用知识点:

  • 创建字符串:String s1 = "Hello, world!";
  • 比较字符串:s1.equals("Hello, world!");
  • 拼接字符串:String s2 = "Hello" + " world!";
  • 字符串长度:int length = s1.length();
  • 字符串截取:String sub = s1.substring(7, 12);
  • 字符串替换:String replaced = s1.replace("world", "Java");
  • 字符串查找:int index = s1.indexOf("world");
  • 转换成大写:String upper = s1.toUpperCase();
  • 转换成小写:String lower = s1.toLowerCase();
  • 去除首尾空白字符:String trimmed = s1.trim();
  • 分割字符串:String[] parts = s1.split(" ");

2、作用:字符串在程序开发中非常常见,它广泛地应用于各种场景,如:用户输入、文件读取、网络通讯、数据库操作等。

3、常量池:

  • 作用:可以通过双引号的方式直接创建字符串对象,不用再通过 new 的方式在堆中创建对象
  • String s = new String("值")
    • 创建二个对象
      • 一个是字符串对象 “值”,被添加到字符串常量池中
    • 另一个通过 new String() 构造函数创建的字符串对象“值”,被分别到堆内存中,同时引用变量 s 存储在栈上,它指向堆内存中字符串对象“值”
    • String s = “值”
      • Java 虚拟机会先在字符串常量池中查找有没有“值”这个字符串对象,如果有,则不创建任何对象,直接将字符串常量池中这个“值”的对象地址返回,赋给变量 s;如果没有,在字符串常量池中创建“值”这个对象,然后将其地址返回,赋给变量 s。

4、String、StringBuild、StringBuffer区别

  • String:不可变
  • StringBuilder:可变,线程不安全,效率高(不能同步访问,但有速度优势)
  • StringBuffer:可变,并且线程安全,效率差。

5、equals 与 == 对比

  • "==" 用于数据类型的比较,判断引用是否指向堆内存的同一块地址
  • equals 用于判断两个变量是否是同一个对象的引用,即堆中的内容是否相同返回值为布尔类型。
  • 比较 java 基本类型:比较基本数据类型只能用 == ,不能用 “equals”,这里的 == 比较两个基本类型的值
  • 比较 String: "==" 比较的是内存地址,“equals” 比较的是值
  • 比较对象:都比较地址

6、注意点:

  • 字符串是不可变的,任何对字符串的操作,如:拼接、截取、替换等操作,都会创建一个新的字符串对象。因此在进行大量字符串操作时,建议使用StringBuilder或StringBuffer进行优化。
  • 在进行字符串比较时,需要使用equals()方法而不是==操作符,因为==操作符比较的是两个字符串对象的引用地址而非内容相等。
  • 字符串常量池:为了减少内存中的字符串对象数量,Java在编译阶段会对同一字符串对象进行优化,将其放入字符串常量池中,以便多次使用。
  • 当处理大量数据时,尽量避免频繁的字符串拼接,否则会导致内存中创建大量临时对象,影响性能。在这种情况下,可以使用StringBuilder或StringBuffer进行优化。

http://www.ppmy.cn/news/228049.html

相关文章

笔记本自身带有扬声器,外接蓝牙音箱,同时工作

对于外接音频设备,在w10下都采用一下方法。 先说下结果:蓝牙播放设备会有延迟,所以这种方法组的多声道只适合有线连接的音箱,当然了想要更好的播放效果还是直接买整套的多声道播放设备吧。 我的设备环境是一台笔记本和一台支持hd…

问题:win7自带蓝牙无法识别外围设备 蓝牙音箱

通过百度 无法解决 使用services.msc服务配置自动/手动 或者到电脑官网寻找服务与支持 下载更新最新版蓝牙驱动 等等 就都没有用 /// 那么 试试下面的 细节 不需要卸载本机的蓝牙驱动 方法 下载千月蓝牙版本 http://soft.onlinedown.net/soft/105655.htm 华军网下载 同时 W…

Mac mini内置扬声器选项不见了

前两天把mac mini拆机更换导热硅脂,更换完成之后没注意,因为一直用minidp转DP连接显示器使用显示器音箱,今天忽然间发现音量输出里面缺少了内置扬声器选项,重启也没有「Duang」的开机声音了; 1:以为是拆机…

Android 视频会议的调用扬声器

最近在做视频会议,发现手机端的参与方听到声音是从听筒传出,于是想要把声音放到扬声器,实现如下: 在视频的页面添加: mAudioManager(AudioManager)getSystemService(Context.AUDIO_SERVICE);mAudioManager.setMode(AudioManager…

电脑连接蓝牙耳机还是外放,输出设备只有扬声器怎么解决?

1. 问题描述 电脑连接蓝牙耳机耳机后,声音依然外放,输出设备只有扬声器,添加输出设备也找不到蓝牙耳机。 2. 排查问题(如果大家遇到的问题与我不同,还请查阅其他文章) 右键计算机图标->管理->设备…

linux 蓝牙音箱测试软件,Ubuntu 17.10为蓝牙和USB扬声器提供显著的可用性改进

在最新的报告中,Ubuntu Desktop团队负责人Will Cooke谈到了有关支持音频的即将推出的Ubuntu 17.10(Artful Aardvark)操作系统的存储库中的一些最新改进。 看来Canonical的开发人员最近一直在努力为Ubuntu 17.10添加一些重要的音频修复,这将大大提高操作系…

【树莓派】解决树莓派连接蓝牙不能听见声音

这个问题真的弄得头大,试了许多方法,终于好了,根据下面步骤来,就可以使蓝牙听声了(也就是重新配置一下蓝牙吧) 升级安装蓝牙相关软件包 sudo apt-get update sudo apt-get upgrade -y sudo apt-get dist-…

IOS上AudioSession设置, 切换扬声器和听筒详解

选择一个Category AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound——用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari…