IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java基础学习七——字符串 -> 正文阅读

[Java知识库]Java基础学习七——字符串

一些概念

  • 字符串被作为对象来处理
  • 内存分为栈内存、堆内存、常量池内存等若干个区域
  • 栈内存存放基本数据类型和对象的引用,堆内存存放对象本身(new修饰的对象),常量池存放字符串常量(直接用双引号定义的)和基本数据类型常量

一、字符串的创建

1.创建格式

首先明确字符串是java.lang包中的String类创建的,是对象,在类和对象那一节中学习到对象的创建方式是(详见Java基础学习二——类与对象):

类名 变量名 = new 类名([实参列表])

对于字符串的创建方式则有两种:

 格式1String str1 = "teacher";
 格式2String str2 = new String("teacher");

2.不同创建格式的区别

(1)格式1

  • 定义针对格式1中内存的存储形式的代码块时,如下:
String str1 = "teacher";
String str2 = "teacher";
  • 对应的内存的存储方式为:
    在这里插入图片描述
    可以看到第一种方式的"teacher"存储在常量池中,且每次创建一个新对象,只要常量的内容相同,常量内存的地址就是一致的;

(2)格式2

  • 定义针对格式2中内存的存储形式的代码块时,如下:
String str1 = new String("teacher");
String str2 = new String("teacher");
  • 对应的内存的存储方式为:
    在这里插入图片描述
    可以看到第二种方式的"teacher"存储在堆内存中,且每次创建一个新的对象,堆内存地址都是不一样的。

(3)两者区别

  • 举个例子强调两者的区别:
public class Example4_4 {
    public static void main(String[] args) {
        String s1 = new String("this is an example");//在堆中创建一个字符串
        System.out.println("堆s1:" + s1);//输出s1字符串的内容
        String s2;
        s2 = new String("this is an example");//在堆中重新创建一个字符串
        System.out.println("堆s2:" + s2);//输出s2字符串的内容
        System.out.println("s1的内容是否等于s2的内容:" + s1.equals(s2));//equal判定对象内容是否相等
        System.out.println("s1和1s2地址是否相等:" + (s1 == s2));//==判定两者堆中的地址和内容是否相等
        String s3, s4;
        s3 = "this is an example";
        s4 = "this is an example";
        System.out.println("常量池s3:" + s3);
        System.out.println("常量池s4:" + s4);
        System.out.println("s3的内容是否等于s4的内容:" + s3.equals(s4));//equal判定对象内容是否相等
        System.out.println("s1和1s2地址是否相等:" + (s3 == s4));//==判定两者堆中的地址和内容是否相等
        String s5 = s1;//把s1中存放的地址赋给s5,s5也指向s1指向的字符串
        System.out.println("s1=s5:"+(s1==s5));//返回true
        System.out.println("s2=s5:"+(s2==s5));//返回false
        System.out.println("s3=s5:"+(s3==s5));//返回false
    }
}

输出内容为:

堆s1:this is an example
堆s2:this is an example
s1的内容是否等于s2的内容:true
s1和1s2地址是否相等:false
常量池s3:this is an example
常量池s4:this is an example
s3的内容是否等于s4的内容:true
s1和1s2地址是否相等:true
s1=s5:true
s2=s5:false
s3=s5:false

3.总结

  • 格式1:String str1 = “teacher”;程序运行时在常量池中找相同内容的字符串,将其常量池中的地址赋值给对象,常量池中内容相同的字符串的地址是相同的;
  • 格式2:String str2 = new String(“teacher”);程序会在堆内存中开辟一个新的空间存放型对象的地址且将其地址赋值给对象;堆内存中字符串内容相同的堆地址不一定相同;看有没有重新new新对象,new了新对象,堆地址会变化

二、字符串的常用方法

下面主要围绕这六种使用方法展开描述。
在这里插入图片描述

1.基本操作方法

(1)字符串连接:+或concat()

  • 使用+号
  • 使用concat(String str)的方法
String s1 = "I am";
String s2 = " a student";
String s3 = s1 + s2;
String s4 = s1.concat(s2);
int s5 = s1.concat(s2)
System.out.println(s3);
System.out.println(s4);
System.out.println("s3=s4:"+(s3==s4));//字1符串连接逻辑异常

输出结果:

I am a student
I am a student
s3=s4:false

(2)获取字符串长度方法:length()

  • String类中的length()方法,与数组长度length属性不同
  • 字符串中的汉字、英文字母、空格、符号都是一个字符
String str = "0";
str.length();

(3)去除空格:trim()

String str1 =" I     ";
String str2 = str1.trim();//str2的值为"I"

2.字符串比较

  • ==:用于比较两个字符串变量的地址,返回布尔值(true或false)
  • equals():比较两个字符串内容是否相同,返回布尔值
  • equalsIgnoreCase():忽略大小写比较内容是否相同,返回布尔值
  • compareTo():按字典顺序比较字符串,返回值为整数,若前者小于方法体里面的对象,返回小于0的值;若前者等于后者,返回0;若前者大于后者,返回大于0的值
String str1 = "bcd";
String str2 = "acd";
String str3 = "cd";
System.out.println(str1.compareTo(str2);//返回1
System.out.println(str1.compareTo(str3);//返回-1

3.字符串与其它类型转换

数据类型字符串👉其它类型其它👉字符串其它👉字符串
byteByte.parseByte(str)String.valueOf([byte] bt)Byte.toString([byte] bt)
intInterger.parseInt(str)String.valueOf([int] i)Int.toString([int] i
longLong.parseLong(str)String.valueOf([long] l)long.toString([long] l
floatFloat.parseFloat(str)String.valueOf([float] f)Float.toString([float] f
doubleDouble.parseDouble(str)String.valueOf([double] d)Double.toString([double] d
charStr.charAt(i)String.valueOf([char] c)Char.toString([char] c
booleanBoolean.getBoolean(str)String.valueOf([boolean] b)Boolean.toString([boolean] b

如下例子

 String s1 = null;       
 byte b=Byte.parseByte(s1);
 s1 = String.valueOf(b);
 Byte.toString(b);

4.查找字符串位置

  • indexOf(字符或字符的Unicode值):在字符串中搜索指定的字符或字串,返回字符串第一次出现的位置,索引从0开始
  • lastIndexOf(字符或字符的Unicode值):在字符串中搜索指定的字符或字串,返回字符串第一次出现的位置

5.查找字符串

(1)获取第i个字符:charAt()

  • charAt()方法
String str ="hello word";
char c1 = str.charAt(0);//c1的值为'h'
char c2 = str.chatAt(6);//c1的值为'w'

(2)获取指定位置的字符方法:getChars()

  • getChars():将字符从字符串中赋值到目标字符数组
    getChars(需要复制的字符串的开始索引,需要复制的字符串的结束索引,需要填充的数组,数组开始的索引号)
String s1 = "012345"
char[] chars = new char[9];
s1.getChars(2,4,chars,0);
System.out.println(chars);/截取字符串填充到数组中,输出为"23",只取到索引号4前面的字符串

6.修改字符串

三、字符串的应用

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 23:43:10  更:2021-07-15 23:44:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/18 17:49:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码