首页 > 编程语言 >Java基础复习——常用类String

Java基础复习——常用类String

时间:2023-07-01 10:14:50浏览次数:49  
标签:Java String int str println new hello 复习

Java 常用类 String

String 类简介

image

  • String 对象用于保存字符串,也就是一组字符序列

  • 字符串常量对象是用双引号括起来的字符序列,例如:"你好", "12.3","boy"等

  • 字符串的字符使用 Unicode 字符编码,一个字符(不区分汉字还是字母)占两个字节

  • String 类较常见的构造方法

    String s1 = new String();
    String s1 = new String(String orginal);
    String s1 = new String(char[] a);
    String s1 = new String(char[] a, int startIndex, int count);
    String s1 = new String(byte[] b);
    
  • String 类实现了接口 Serializable 【String 可以串行化——在网络传输】,接口 Comparable 【String 对象可以比较大小】

  • String 是 final 类,不能被其他类继承

  • String 有属性,private final char value[];用于存放字符串内容

  • 一定要注意:value 是一个final 类型,不可以修改

创建 String 对象

方式一:直接赋值

String s1 = "hsp";

方式二:调用构造器

String s2 = new String("hello");

区别:

方式一:先从常量池查看是否有"hello" 数据空间,如果有,直接指向;如果没有则重现创建,然后指向,s1最终指向的是常量池的空间地址

方式二:现在队中创建,里面维护了value 属性,指向常量值的 "hello" 空间,如果常量池没有 "hello",重新创建,如果有,直接通过 value 指向。s2最终指向的堆中的空间地址

两种方式的内存分布图如下

image

练习题

String a = "abc";
String b = "abc";
System.out.println(a.equals(b)); // true 比较字符串内容
System.out.println(a == b); // true
String a = "hello";   // a 指向常量池的 "hello"
String b = new String("hello"); // b 指向堆总的对象,堆中对象的value指向常量池的"hello"
System.out.println(a.equals(b)); // true
System.out.println(a == b); // false
System.out.println(a == b.intern()); // true
System.out.println(b == b.intern()); // false

注意:当调用 intern 方法,如果池中已经包含一个等于此 String 对象的字符串equals(Object)方法确),则返回池中的字符串。否则,将此String 对象添加到池中,并返回此 String 对象的引用

解读:b.intern() 方法最终返回的是常量池的地址(对象)

字符串的特性

  1. String 是一个 final 类,代表不可变的字符序列

  2. 字符串是不可变的,一个字符长对象一旦被分配,其内容是不可变的

    参考博客 java中为啥String是不可变的

练习题1:

String s1 = "hello";
s1 = "haha";
// 问:创建了几个对象?
// 答:2个

image

练习题2:

String a = "hello" + "abc";
// 问:创建了几个对象?
// 答:只有一个对象

// (1) 编译器做了优化,判断创建的常量池对象,是否有引用指向
// (2) String a = "hello" + "abc" ==> String a = "helloabc"
String a = "hello";
String b = "abc";
String c = a + b;
// 问:创建了几个对象?
// 答:3个
/* 	
	(1) 先创建了StringBuilder sb = new StringBuilder()
 	(2) 执行 sb.append("hello")
	(3) sb.append("abc")
	(4) String c = sb.toString() // toString() 方法会new一个String对象
*/
String d = "helloabc";
System.out.println(c == d); // false

image

小结:String c = "ab" + "cd;" 常量相加,看的是池,String c = a + b;变量相加,是在堆中

练习题3

public class Test1 {
    String str = new String("abc");
    final char[] ch = {'j', 'a', 'v', 'a'};

    public void change(String str, char[] ch) {
        str = "java";
        ch[0] = 'h';
    }

    public static void main(String[] args) {
        Test1 ex = new Test1();
        ex.change(ex.str, ex.ch);
        System.out.println(ex.str + " and");
        System.out.println(ex.ch);
    }
}

image

String 类的常见方法

说明:String 类是保存字符串常量的,每次更新都需要重新开辟空间,效率较低,一次 java 设计者还提供了 StringBuilder 和 StringBuffer 来增强 String 的功能,并提高效率。

// 效率太低
String s = new String("");
for (int i = 0; i < 80000; i++) {
    s += "hello ";
}
char	charAt(int index)
int	compareTo(String anotherString)
int	compareToIgnoreCase(String str)
String	concat(String str)
boolean	equals(Object anObject)
boolean	equalsIgnoreCase(String anotherString)
static String	format(String format, Object... args)
int	indexOf(String str)
boolean	isEmpty()
static String	join(CharSequence delimiter, CharSequence... elements)
int	lastIndexOf(String str)
int	lastIndexOf(String str, int fromIndex)
int	length()
String	replace(char oldChar, char newChar)
String[]	split(String regex)
String	substring(int beginIndex, int endIndex)
char[]	toCharArray()
String	toLowerCase()
String	toUpperCase()
String	trim()

标签:Java,String,int,str,println,new,hello,复习
From: https://www.cnblogs.com/ai135/p/17518881.html

相关文章

  • Java基础复习——接口
    接口(interface)什么是接口?接口主要用来描述类具有什么功能,而并不给出每个功能的具体实现。接口不是类,是对类的一组需求描述,这些类就是遵从接口描述的统一格式进行定义。定义接口定义接口的关键字:interface接口与类的关系:实现关系(implements)继承是“isa”的关系,而接......
  • Java基础复习——枚举类
    枚举类假设要创建一个季节(Season)对象classSeason{privateStringname;privateStringdesc;//描述 //构造器//get//...}思考?季节只有四个,是固定的四个对象创建的Season对象有如下特点季节是有限的四个值只读,不需要修改代码实现如下:public......
  • Java基础复习——内部类
    内部类什么是内部类?一个类中又完整的嵌套了另一个类结构。被嵌套的类称为内部类(innerclass),嵌套其他类的类称为外部类(outerclass)。内部类的最大特点:可以直接访问私有属性,并且可以体现类与类之间的包含关系。为什么使用内部类内部类方法可以访问该类定义所在的作用域中的......
  • Java基础复习——注解
    注解(Annotation)什么是注解?插入到源码中用于某种工具处理的标签。注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。在Java中,注解是当作一个修饰符来使用的,它被置于备注解项之前,中间没有分号每一个注解的名称前面......
  • Java基础语法
    Java语法快速入门1.1程序的入口#java程序入口为类中的static的viod的main函数,参数固定为字符串数组publicstaticvoidmain(String[]args){System.out.println("helloworld");}1.2文件名#一个文件中最多只能有一个public类且【文件名】必须和【public类名......
  • nested exception is java.sql.SQLException: connection disabled
    标题:解决SpringBoot连接数据库出现"connectiondisabled"异常在使用SpringBoot连接数据库时,有时候会遇到"nestedexceptionisjava.sql.SQLException:connectiondisabled"异常。这个异常通常是由以下原因引起的:数据库连接配置错误:检查数据库连接的URL、用户名和密码是否正确配......
  • Java 基础复习——StringBuffer 和 StringBuilder
    StringBuffer和StringBuilderStringBuffer类简介java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法和String相同,但StringBuffer是可变长度的StringBuffer是一个容器注意:StringBuffer的直接父类是AbstractStringBuilder有属......
  • Java的MVC设计模式,带你深刻理解MVC
    什么是MVC?就是ModelViewControl,模型视图控制器。MVC流程图解1.MVC概念:MVC本来是存在于Desktop程序中的,M(Model)是指数据模型,V(View)是指用户界面,C(Control)是控制器。使用MVC的最直接目的就是将M和V实现代码分离,C则是确保M和V的同步,一旦M改变,V应该同步更新。2.MVC工作方......
  • Java中的内部类,代码块
    前言学习Java过程中,对内部类和代码块部分知识比较模糊,容易忘掉。今天再学的时候有一些其他的收获,整理记录一下。1.代码块代码块的作用可以为初始化变量。都在在构造器方法之前执行,分为静态代码块和匿名代码块。静态代码块是在类加载时执行,因此只执行一次。匿名代码块在new实......
  • JAVA石头迷阵游戏
    大家帮我看看这个代码有没有问题,为什么将z设为作弊器但是在IDE中运行出来没有用//测试类importjavax.swing.*;publicclassTest{publicstaticvoidmain(String[]args){newMainFrame();}}importjavax.swing.*;importjava.awt.event.ActionEvent;......