【JAVA基础】String类概述

简介: 前言:1.String类概述2.创建字符串对象的2种方式3.String常见面试题4.String类常用API-字符串内容比较

前言:


API (Application Programming Interface,应用程序编程接口)

Java写好的技术(功能代码),咱们可以直接调用。


Oracle 也为Java提供的这些功能代码提供了相应的 API文档(技术使用说明书) 。

下载API文档:


API文档


String简单介绍


String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。


关于 String 类同学们需要学会什么


1.String类概述


String 概述


java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。


Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。

String name = "滴滴";
String schoolName = "滴滴答答";

String类的特点详解


String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。

    public static void main(String[] args) {
        String name = "热爱";
        name += "编程的";
        name +="小白白";
        System.out.println(name);
    }

从上述代码可以看出字符串变量name指向的字符串对象,那为何还说字符串不可变呢?


字符串对象存在哪里?


以“”方式给出的字符串对象,在字符串常量池中存储。

String是不可变字符串的原因?


String变量每次的修改其实都是产生并指向了新的字符串对象。


原来的字符串对象都是没有改变的,所以称不可变字符串。


2.创建字符串对象的2种方式


方式一:直接使用“”定义。(推荐方式)

String name = "热爱编程的小白白";

方式二:通过String类的构造器创建对象。


构造器 说明


public String() 创建一个空白字符串对象,不含有任何内容


public String(String original) 根据传入的字符串内容,来创建字符串对象


public String(char[] chs) 根据字符数组的内容,来创建字符串对象


public String(byte[] chs) 根据字节数组的内容,来创建字符串对象



有什么区别吗?(面试常考)


以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。


通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true
char[] chs = {'a', 'b', 'c'};
String s3 = new String(chs);
String s4 = new String(chs);
System.out.println(s3 == s4); // false

通过“”定义字符串内存原理 通过new构造器得到字符串对象字符串对象的特点有哪些?


双引号创建的字符串对象,在字符串常量池中存储同一个。


通过new 构造器创建的字符串对象,在堆内存中分开存储。


3.String常见面试题



代码如下(大家可以运行测试一下):

 public static void main(String[] args) {
            String s2 = new String("abc");
            String s1 = "abc";
            System.out.println(s1 == s2);
        }


 代码如下(大家可以运行测试一下):

   public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "ab";
            String s3 = s2 + "c";
            System.out.println(s1 == s3);
        } 
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2);
}

4.String类常用API-字符串内容比较


字符串的内容比较

  public static void main(String[] args) {
                String sysLoginName = "itheima";
                Scanner sc = new Scanner(System.in);
                System.out.println("请您输入您的登录名称");
                        String loginName = sc.next();
                System.out.println(sysLoginName == loginName);
    }


结论:字符串的内容比较不适合用“==”比较。


字符串的内容比较


推荐使用String类提供的“equals”比较:只关心内容一样即可


方法名 说明


public boolean equals (Object anObject) 将此字符串与指定对象进行比较。只关心字符内容是否一致!


public boolean equalsIgnoreCase (String anotherString) 将此字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致!


equals

 public static void main(String[] args) {
                String sysLoginName = "itheima";
                Scanner sc = new Scanner(System.in);
                System.out.println("请您输入您的登录名称");
                        String loginName = sc.next();
                System.out.println(sysLoginName.equals(loginName));
    }

equalsIgnoreCase

    public static void main(String[] args) {
                String sysLoginName = "itheima";
                Scanner sc = new Scanner(System.in);
                System.out.println("请您输入您的登录名称");
                        String loginName = sc.next();
                System.out.println(sysLoginName.equalsIgnoreCase(loginName));
    }

因为,equalsIgnoreCase忽略大小写比较字符串。所以我把其中的字母改成大写,两字符比较仍然得到true


相关文章
|
14天前
|
Oracle Java 关系型数据库
Java基础(一):语言概述
Java基础(一):语言概述
Java基础(一):语言概述
|
3月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
186 57
|
2月前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
Java 中的 String Pool 简介
|
2月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
java 为什么 String 在 java 中是不可变的?
|
3月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
275 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
2月前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
|
3月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
87 8
|
3月前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
147 7
|
3月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。