返回顶部
首页 > 资讯 > 后端开发 > JAVA >【JavaSE】String类
  • 197
分享到

【JavaSE】String类

java开发语言String 2023-09-07 19:09:13 197人浏览 安东尼
摘要

两种创建String对象的区别 String s1 = "hello";String s2 = new String("hello"); s1是先查看常量池是否有 “hello” 数据空间,如果有就直

两种创建String对象的区别

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

s1是先查看常量池是否有 “hello” 数据空间,如果有就直接指向它,如果没有就创建然后指向它。s1最终指向的是常量池的空间地址。
s2是先在堆中创建空间,里面有value属性,指向常量池的 “hello” 空间,如果常量池没有 “hello” 则创建,如果有则通过value指向,s2最终指向的是堆中的空间地址。
s1和s2的内存布局
在这里插入图片描述
那我们来看下面的题目:

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() 返回的是常量池的地址 所以是 trueSystem.out.println(a==b.intern()); //b指向堆中的地址,b.intern()返回的是常量池的地址所以是falseSystem.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 = "小徐";// 如图所示 地址相同 trueSystem.out.println(p1.name==p2.name);//比较的是值是否相等 trueSystem.out.println(p1.name.equals(p2.name)); //trueSystem.out.println(p1.name=="小徐");

在这里插入图片描述
String类是一个final类,代表不可变的字符序列。字符串是不可变的,字符串对象一旦被分配,值就不可变。

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

上面的代码一共创建了两个对象
在这里插入图片描述

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

在这里插入图片描述

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    }}

在这里插入图片描述
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();//使用构造器sString 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的区别。

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

来源地址:https://blog.csdn.net/qq_58032742/article/details/132629373

--结束END--

本文标题: 【JavaSE】String类

本文链接: https://lsjlt.com/news/398842.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JAVASE---String类
    String类的重要性 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常...
    99+
    2023-10-09
    java 开发语言
  • 【JavaSE】String类
    两种创建String对象的区别 String s1 = "hello";String s2 = new String("hello"); s1是先查看常量池是否有 “hello” 数据空间,如果有就直...
    99+
    2023-09-07
    java 开发语言 String
  • 【javaSE】 抽象类
    目录 抽象类概念 抽象类语法 抽象类特性 1. 抽象类不能直接实例化对象 2. 抽象方法不能是 private 的 3. 抽象方法不能被final和static修饰 4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法 5. 抽象类...
    99+
    2023-09-01
    java 开发语言 抽象类
  • 【JavaSE】内部类
    文章目录 内部类概念局部内部类匿名内部类(重点重点!!! )成员内部类静态内部类 内部类概念 可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的...
    99+
    2023-09-14
    java 开发语言 内部类
  • 解析JavaSe的内部类
    目录内部类1. 内部类简介2. 非静态内部类3. 静态内部类4. 匿名内部类总结内部类 1. 内部类简介 (1) 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包...
    99+
    2024-04-02
  • javaSE的Arrays类怎么用
    本篇内容主要讲解“javaSE的Arrays类怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javaSE的Arrays类怎么用”吧!在JDK的java.util包中定义的Arrays类提供...
    99+
    2023-06-17
  • JAVASE---抽象类和接口
    抽象类 抽象类的概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类语法 在Java中,一个类如果被 abst...
    99+
    2023-09-21
    java 开发语言
  • 【JavaSE】数据类型与变量
    目录 1. 字面常量 2. 数据类型  3. 变量  3.1 变量概念 3.2 语法格式  3.3 整型变量  3.3.1 整型变量 3.3.2 长整型变量   3.3.3 短整型变量  3.3.4 字节型变量 3.4 浮点型变量   3....
    99+
    2023-10-27
    java 开发语言 JavaSE基本语言
  • JavaSE的类和对象是什么
    这篇文章主要介绍了JavaSE的类和对象是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.基本概念首先我们需要弄清楚几个概念:面向对象是什么、类是什么、对象又是什么?还...
    99+
    2023-06-29
  • 解析JavaSe的抽象类和接口
    目录1. 抽象类和抽象方法2. 相关面试题1、抽象类必须要有抽象方法吗?2、普通类和抽象类有哪些区别?3、抽象类能使用 final 修饰吗?3. 接口3.1 接口中的常量3.2 接口...
    99+
    2024-04-02
  • 【JavaSE语法】数据类型与变量
    一、字面常量 常量即程序运行期间,固定不变,不可修改的量称为常量 public class Demo { public static void main(String[] args) { System.out.print...
    99+
    2023-10-28
    java 开发语言
  • JavaSE系列基础包装类及日历类详解
    目录1. 基本类型包装类1.1 概述1.2 Integer类的概述与使用1.3 int和String的相互转换1.4 案例-字符串中数据排序1.5 自动装箱和拆箱2. Date类2....
    99+
    2024-04-02
  • JavaSE学习之内部类及常用API
    目录1.内部类1.1内部类概述1.2成员内部类1.3局部内部类1.4匿名内部类1.5匿名内部类在开发中的使用2.常用API2.1Math2.2System2.3Object2.4Ar...
    99+
    2024-04-02
  • JavaSE的类和对象你真的了解吗
    目录1.基本概念1.1面向对象1.2类和对象2.类的定义及使用2.1定义2.2类的实例化3.this引用3.1访问成员变量3.2访问成员方法3.3this引用的特性4.构造方法4.1...
    99+
    2024-04-02
  • JavaSE中内部类及常用API有哪些
    这篇文章将为大家详细讲解有关JavaSE中内部类及常用API有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.内部类1.1 内部类概述内部类:就是在一个类中定义一个类。例如:在一个类A内部定义一个类...
    99+
    2023-06-22
  • 【JAVA】String类
    作者主页:paper jie_的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将ja...
    99+
    2023-09-13
    java 开发语言
  • 【JAVA】String 类
    ⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 Ǵ...
    99+
    2023-08-31
    java 开发语言
  • javase是什么
    JavaSE可以说是Java中的基础部分,也是运行JAVA程序不可缺少的环境,Java SE 是Java平台标准版的简称,用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。...
    99+
    2024-04-02
  • 【javaSE】初识Java
    目录  Java是什么 Java语言发展简史 初识Java的main方法 运行Java程序 JDK、JRE、JVM之间的关系 Java中的标识符  Java是什么 Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解...
    99+
    2023-09-01
    java 开发语言
  • 一篇文章带你了解JavaSE的数据类型
    目录前言Java类型汇总整型变量-int\长整型变量-long\短整形变量-short浮点型变量-double\float字符类型变量-char字节类型变-byte布尔类型变量-bo...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作