字符串

本文详细探讨了Java中String类的不可变性、存储方式、创建方法及内部实现细节,同时对比了String、StringBuffer和StringBuilder的区别与应用场景。重点介绍了String类在字符串操作中的高效用法及intern方法的用途,最后通过实例展示了如何在Java程序中正确使用这些类以提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String类

该类一旦产生一个字符串,其对象就不可变。
- String类使用private final char value[]来实现字符串的存储,也就是说,String对象创建够,就不能再改变此对象中存储的字符串内容。

  • String类有一个特殊的创建方法,就是使用”“双引号来创建,例如new String(“jinder”)实际创建了2个String对象。一个是”jinder”通过”“创建的。另一个是通过new创建的。只不过他们创建的时期不同。一个在编译期,一个在运行期。

  • 运行时期,调用String类的intern方法,就可以向String Pool中动态添加对象。

这里写图片描述

String类的创建方法

  1. 直接使用”“引号创建
  2. 使用new String()创建
  3. 使用new String(“someString”)创建以及其他一些重载构造函数创建
  4. 使用重载的字符串连接符”+”创建

在Java中使用new关键字会创建一个新的对象。不管在String Pool中是否已经有值相同的对象,都会在heap中创建一个新的对象。

    String s1 = new String("777");
    String s2 = "aaa777";
    Stirng s3 = "aaa" + "777";
    String s4 = "aaa" + s1;
    System.out.println(s2 == s3); //true
    System.out.println(s2 == s4); //false
    System.out.println(s2 == s4.intern()); true

line6: 由于s1是变量,在编译期不能确定它的值是多少,所以会在执行的时候创建一个新的String对象存储在heap中,然后赋值给s4.

line7:S4调用intern方法,是s4所引用的对象动态的添加到常量池中。然后与s2比较。因为都在常量池中所以”==”返回true。

StringBuffer

StringBuffer类是字符串缓冲区,跟String类似用来存储字符串数据。如果要修改一个StringBuffer类的字符串,就不需要再穿坚信的字符串对象。StringBuffer类属于java.lang包。
这里写图片描述
示例:在一下程序中,创建了几个对象?

    String A, B, C;
    A = "a";
    B = "b";
    A = A + B;
    StringBuffer D = new StringBuffer("abc");
    D = D.append("567");

line2: 创建一个对象”a”和一个引用A;

line3: 创建一个对象”b”和一个引用B;

line4: 创建一个对象,并由原来的A来引用,原来A所指向的对象就会变成垃圾对象,等待回收。

line5: StringBuffer的特点是改变对象本身而不创建新的对象,因此第6行都是对同一个对象进行处理。而字符串对象也是一个对象,固有两个对象。

所以,一共创建了5个对象。

面试题目

一、字符串字面量是否自动生成一个String对象

答案是肯定的,字符串类具有一定的特殊性,JVM在执行双引号操作符的时候,会自动创建一个String对象,并返回这个对象的引用

二、StringBuffer和StringBuilder存在的作用是什么?

在Java程序里,如果需要大量拼接字符串的话,应该使用StringBuffer和StringBuilder类,他们可以避免不必要的String对象的产生,以提高程序的性能。他们功能相似,只不过StringBuilder是线程安全的。

1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值