【JavaSE】String类

这篇具有很好参考价值的文章主要介绍了【JavaSE】String类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

两种创建String对象的区别

String s1 = "hello";
String s2 = new String("hello");

s1是先查看常量池是否有 “hello” 数据空间,如果有就直接指向它,如果没有就创建然后指向它。s1最终指向的是常量池的空间地址。
s2是先在堆中创建空间,里面有value属性,指向常量池的 “hello” 空间,如果常量池没有 “hello” 则创建,如果有则通过value指向,s2最终指向的是堆中的空间地址。
s1和s2的内存布局
【JavaSE】String类,Java,java,开发语言,String
那我们来看下面的题目:

String a = "abc";
String b = "abc";
// true equals比较的是值是否相等
System.out.println(a.equals(b)); 
// true a和b的地址是一样的
System.out.println(a==b); 
String a = "hello";
String b = new String("hello");
// true  比较的是值
System.out.println(a.equals(b));
 // false  根据上面的内存布局可以看出a,b地址不一样
System.out.println(a==b);
//b.intern() 返回的是常量池的地址 所以是 true
System.out.println(a==b.intern()); 
//b指向堆中的地址,b.intern()返回的是常量池的地址所以是false
System.out.println(b==b.intern()); 
String s1 = "hello java";
String s2 = "hello";
String s3 = "hello";
String s4 = new String("hello");
System.out.println(s2==s4); //false 地址不一样
System.out.println(s2==s3); //true 都指向常量池的hello空间
System.out.println(s2.equals(s3));// true 比较内容是否相等
System.out.println(s1==s2); // false 指向的常量池地址不一样
Person p1 = new Person();
p1.name = "小徐";
Person p2 = new Person();
p2.name = "小徐";
// 如图所示 地址相同 true
System.out.println(p1.name==p2.name);
//比较的是值是否相等 true
System.out.println(p1.name.equals(p2.name)); 
//true
System.out.println(p1.name=="小徐");

【JavaSE】String类,Java,java,开发语言,String
String类是一个final类,代表不可变的字符序列。字符串是不可变的,字符串对象一旦被分配,值就不可变。

String s = "java";
s = "hello";

上面的代码一共创建了两个对象
【JavaSE】String类,Java,java,开发语言,String

String s1 = "java";
String s2 = "hello";
//根据debug我们可以知道,先会创建一个StringBuilder对象,
//然后后执行里面的append方法,最后调用toString
String s3 = s1 + s2;

【JavaSE】String类,Java,java,开发语言,String

public class StringExcise02 {
    String str = new String("hello");
    final char[] ch = {'j','a','v','a'};
    public void change(String str,char[] ch) {
        str = "java";
        ch[0] = 'x';
    }
    public static void main(String[] args) {
        StringExcise02 ex= new StringExcise02();
        ex.change(ex.str, ex.ch);
        System.out.println(ex.str + "end"); //helloend
        System.out.println(ex.ch); //xava
    }
}

【JavaSE】String类,Java,java,开发语言,String
StringBuffer类
StringBuffer保存的是字符串变量,里面的值可以更改,每次更新不用创建新的对象,效率高于String。
String转StringBuffer

String str = "java";
//返回的stringBuffer才是StringBuffer对象,对str本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//使用append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append("java");

StringBuffer转String

StringBuffer stringBuffer2 = new StringBuffer("java");
//使用StringBuffer提供的toString方法
String s = stringBuffer2.toString();
//使用构造器s
String s1 = new String(stringBuffer2);

例题:把数字 234156.33 按示例 234,156.33 打印

public class StringExcise04 {
    public static void main(String[] args) {
        String price = "234156.33";
        StringBuffer stringBuffer = new StringBuffer(price);
        for (int i = stringBuffer.lastIndexOf(".") - 3; i > 0; i -= 3) {
            stringBuffer = stringBuffer.insert(i, ",");
        }
        System.out.println(stringBuffer);
    }
}

StringBuilder类
String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。

String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:
String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
StringBuilder变为String: 调用toString()方法。

String、StringBuffer、StringBuilder的区别。文章来源地址https://www.toymoban.com/news/detail-688901.html

  • String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
  • StringBuffer与StringBuilder大部分功能是相似的
  • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

到了这里,关于【JavaSE】String类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaSE】初识java

    目录 Java语言概述 Java是什么 Java语言重要性 语言广泛使用程度 工作领域 在校招中的岗位需求​编辑 Java语言发展简史 Java语言特性 ​编辑Java开发环境安装 初识Java的main方法 main方法示例 运行Java程序 JDK、JRE、JVM之间的关系 注释 基本规则 注释规范 标识符 ​编辑 总结

    2024年02月16日
    浏览(29)
  • JavaSE——初始java

    目录 一.Java是什么 二.Java语言的特性 1. 简单性 2. 面相对象 3. 分布式(微服务) 4. 健壮性 5. 安全性 6. 体系结构中立 7. 可移植性 8. 解释性 9. 高性能 10. 多线程 11. 动态性 三.JDK环境配置 1.简介 2.安装  3.配置 4.检验 四.第一个Java程序 1.初始程序 2.运行程序 3.JDK、JRE、JVM三者之间的

    2023年04月08日
    浏览(33)
  • 【javaSE】String类(2)

    hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍  💥 个人主页: E绵绵的博客 💥 所属专栏: JAVASE题目练习

    2024年04月26日
    浏览(19)
  • 【JavaSE】String类

    两种创建String对象的区别 s1是先查看常量池是否有 “hello” 数据空间,如果有就直接指向它,如果没有就创建然后指向它。s1最终指向的是常量池的空间地址。 s2是先在堆中创建空间,里面有value属性,指向常量池的 “hello” 空间,如果常量池没有 “hello” 则创建,如果有则

    2024年02月10日
    浏览(22)
  • 【JavaSE】Java的反射机制

    1.java反射机制 1.1简介 被视为动态语言的关键,允许程序在执行期间,借助于RefectionAPI取得任何类的内部信息。在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个类对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方

    2024年04月26日
    浏览(31)
  • 【JavaSE】java刷题--数组练习

    本篇讲解了一些数组相关题目(主要以代码的形式呈现),主要目的在于巩固数组相关知识。 上一篇 数组 讲解了一维数组和二维数组的基础知识~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 思路 首先要判断 空指针和空数组 的情况,利用 字符

    2024年04月10日
    浏览(30)
  • 【JavaSE】Java方法的使用

    【本节目标】 1. 掌握方法的定义以及使用 2. 掌握方法传参 3. 掌握方法重载 4. 掌握递归 目录 1.方法概念及使用 1.1什么是方法(method) 1.2 方法定义 1.3 方法调用的执行过程 1.4 实参和形参的关系 2. 方法重载 2.1 为什么需要方法重载 2.2 方法重载概念 3. 递归 3.1 生活中的故事 3.2 递

    2024年02月12日
    浏览(28)
  • Java面试整理(二)《JavaSE》

    说明:我会根据我自己的经验,给每个内容标注重要程度,共有三个等级:低、中、高。仅个人参考意见。 JVM是Java Virtual Machine的缩写,是用于运行Java字节码的虚拟机,JVM是运行在操作系统之上,这也是Java程序为什么能够运行在不同的平台或操作系统的原因。 JVM是Java语言

    2024年02月09日
    浏览(23)
  • 【JavaSE】第一个Java程序

    在JavaSE的系列中,将从第一个Java程序开始叙述,系统的把JavaSE的内容总结一次。毕竟这是第二次学习JavaSE的内容,因此感触也相对比较深一些。在JavaSE的初步计划中,大概有十一到十三篇文章,大致有:第一个Java程序、变量与运算符、流程控制、面向对象(封装、继承、多

    2024年01月22日
    浏览(27)
  • 【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

    List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。 Queue (实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。 Map (⽤ key 来搜索的专家): 使⽤键值对(key-value)存

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包