Java学习笔记 05 - 字符串

一、认识字符串

字符(char)类型是Java得基本数据类型之一,用来存储单个字符。在开发过程中,往往多个字符在一起才能表达一个有意义的数据。Java提供了字符串类型,用来处理一连串得字符。字符串便是有若干字符组成得序列

1、字符串的声明和初始化

Java中,声明和初始化一个字符串的语法格式如下:

String 变量名 = "初始值";
//或
String 变量名 = new String("初始值");

实例:


public class Test {
		public static void main(String[] args){
			String str1 = "Hello Word";
			String str2 = new String("Hello Word");
			}
			}

说明:

  • 一旦创建了string对象,那么它的无法改变了。
  • 事实上,String类型用一个char类型数组来存储,处理字符串的。

2、字符串的连接

多个字符串连接在一起,也可以将字符串与基本类型变量连接。最常用连接字符串的方法是使用+操作符
实例:

public class Test{
	public static void main(String[] args) {
		String str1 = "Hello";
		String str2 = "Word";
		String str3 = str1  + str2;
		String str4 = "Hello" + "Word";
		int num1 = 123;
		String str5 = num1 + str1;
		String str6 = str1 + num1;
		System.out.println("str1 = " + str1);
		System.out.println("str2 = " + str2);
		System.out.println("str3 = " + str3);
		System.out.println("str4 = " + str4);
		System.out.println("str5 = " + str5);
		System.out.println("str6 = " + str6);
		}
		}

说明:

  • 字符串基本数据类型变量使用+操作符进行连接时,会先将基本数据类型转换为字符串类型,然后进行连接操作。

3、字符串的比较

在程序中,比较两个数据是否相等是一种很常见的操作,基本数据类型的变量之间使用==操作符便可以判断 变量中保存的数据是否相等。而字符串之间的比较有所不同。
实例:

public class Test {
	public static void main(String[] args) {
		String str1 = "Hello";
		String str2 = "Hello";
		String str3 = new String("Hello");
		System.out.println("(str1 == str2) = " + (str1 == str2));
		System.out.println("(str1 == str3) = " + (str1 == str3));
		System.out.println("str1.equals(str3) = " + str1.equals(str3));
	}
}

说明:

  • ==操作符比较str1str2,结果为true,事实上==操作符比较的是变量中存储的内容数据内存地址编号)。字符串是引用类型str1 == str2的结果为ture,意味着str1str2两个变量中存储着同样的内存地址编号,即引用了同一块内存
  • String类型提供了equals(Object anObject)方法,可以比较字符串字面值是否相同,str1.equals(str3)的返回结果为ture。因此,如果要比较字符串的字面值是否相同需要使用equals(Object anObject)方法。

4、内存中的字符串

实例:

public class Test {
	public static void main(String[] args) {
		// 基本数据类型
		int num1 = 1;
		int num2 = 1;
		System.out.println("(num1 == num2) = " + (num1 == num2));

		// 数组,引用数据类型
		char[] char1 = {'H'};
		char[] char2 = {'H'};
		System.out.println("(char1 == char2) = " + (char1 == char2));

		// String,引用数据类型
		String str1 = "Hello";
		String str2 = "Hello";
		System.out.println("(str1 == str2) = " + (str1 == str2));
	}
}

num1num2两个基本数据类型的变量进行==运算,这两个变量中存储的都是基本数据类型的值,即1,因此返回结果是truechar1char2两个数组进行==运算,因为它们是引用类型,分别在堆内存中申请了内存空间,所以char1char2两个变量中存储的是不同的内存地址编号,故而返回结果为false。同为引用类型的String型的变量,str1str2使用==操作符比较时,返回的结果是true,即str1str2引用的内存地址相同,这是什么原因呢?

事实上,这是Java有意为之,由于字符串这一类型的数据是程序中出现频率的数据类型,并且字符串内容重复改率特别高,如果全部分开申请内存的话,将会非常的耗费内存,Java为了节省内存考虑,设计了字符串池这一内存区域。(字符串池在JDK 7以前设计在方法区中,而在JDK 8以后设计在堆内存中)。
说明:
执行代码String str1 = "Hello"时,首先在栈中main方法对应栈帧的局部变量表中,为变量 str1分配内存查找字符串池是否有一块内存中已经存储了Hello这一字符串字面量,没有的话,字符串池中分配内存存储字符串字面量"Hello"赋值操作会将字符串池中已经分配好内存空间的首地址存储到变量str1局部变量表对应位置
执行代码String str2 = "Hello"时,栈中main方法对应栈帧的局部变量表中,为变量str2分配内存,查找字符串池中是否有一块内存中已经存储了Hello这一字符串字面量,有的话,引用该内存地址
执行代码System.out.println("(str1 == str2) = " + (str1 == str2)),由于变量str1str2引用的内存地址相同,故返回结果为true

二、字符串常用API

1、什么是API

APIApplication Programming Interface),即应用程序编程接口,对这一概念的定义大多数都晦涩难懂。这里通俗的理解这一概念:

  • A(Application),即应用,按不同的场合,可以是一个提供特定功能的软件、一个提供某些数据的网络服务、一个作为程序组件的类库、甚至是一个硬件设备,等等。
  • P(Programming),即编程
  • I(Interface),即接口是不同系统或实体交接并通过它彼此作用的媒介(或者理解为方式、渠道、手段)。
    所以,API就是在编程过程中,实体或系统之间进行信息交换的媒介
    更直白的理解,当某一应用需要与其他应用进行信息交换时,需要通过某一媒介,告知对方应用一些信息,同时获取本应用所需要的信息,同时,该媒介应当隐藏这些应用的其他细节,这一媒介便是API,与这一媒介具有同样性质的事物,都可以称之为API。
    开发人员在使用API时,无需关心API后面隐藏的实现细节,仅需要关心API的名称输入什么数据获得什么数据这三点就足够了。

2、字符串常用API

Java字符串常用的API

方法返回值类型方法说明
equals(Object anObject)boolean将此字符串与指定的对象比较
equalsIgnoreCase(String anotherString)boolean忽略大小写比较两个字符串的字面值是否相等
length()int获取字符串的长度
charAt(int index)char获取指定索引处的 char
indexOf(String str)int获取指定子字符串在原字符串中第一次出现处的索引
lastIndexOf(String str)int获取指定子字符串在原字符串中最右边出现处的索引
startsWith(String prefix)boolean测试原字符串是否以指定的前缀开始
endsWith(String suffix)boolean测试原字符串是否以指定的后缀结束
toLowerCase()String获取原字符串对应的小写字符串
toUpperCase()String获取原字符串对应的大写字符串
substring(int beginIndex)String截取原字符串,从传入参数beginIndex为下标的位置开始截取到末尾
substring(int beginIndex, int endIndex)String截取原字符串,从参数beginIndex为下标的位置开始截取到参数endIndex为下标的位置
trim()String去掉原字符串首尾的空格
split(String regex)String[]将原字符串按照传入参数regex分割为字符串数组
replace(String regex, String replacement)String将原字符串中指定的内容替换成另外的内容

三、字符串与基本数据类型的转换

1、基本数据类型转换为String类型

基本数据类型转换为字符串通常有两种方法:

  1. 通过字符串连接将基本类型转换为String类型。
  2. 通过String类型提供的valueof(基本类型数据 变量名)方法将基本类型转换成字符串类型
    实例:
public class Test {
	public static void main(String[] args) {
		// 通过连接字符串将基本类型转换为String类型
		int num1 = 10;
		double num2 = 3.14;
		boolean boolean1 = true;
		String sNum1 = "" + num1;
		String sNum2 = "" + num2;
		String sBoolean1 = "" + boolean1;
		// 通过valueOf(基本类型数据 变量名)方法将基本类型转换为String类型
		int num3 = 10;
		double num4 = 3.14;
		boolean boolean2 = true;
		String sNum3 = String.valueOf(num3);
		String sNum4 = String.valueOf(num4);
		String sBoolean2 = String.valueOf(boolean2);
	}
}

说明:

  • 使用+运算符将基本类型与字符串类型连接时,Java首先自动将基本类型转换成字符串类型,然后连接在一起.。
  • 使用String类的valueOf(基本类型数据 变量名)方法可以将基本类型转换成字符串类型,该方法无需String类型的变量,直接使用类名String即可调用。

2、String类型转换为基本数据类型

将字符串类型转换为基本类型,需要使用基本类型的包装类。Java为每一种基本类型都提供了对应的包装类,包装类提供了一些常用的操作,其中就包括将字符串类型转换成基本类型。基本类型的包装类及其转换方法如下表:

基本类型包装类方法方法说明
byteByteparseByte(String s)将字符串转换为byte类型
shortShortparseShort(String s)将字符串转换为short类型
intIntegerparseInt(String s)将字符串转换为int类型
longLongparseLong(String s)将字符串转换为long类型
floatFloatparseFloat(String s)将字符串转换为float类型
doubleDoubleparseDouble(String s)将字符串转换为double类型
booleanBooleanparseBoolean(String s)将字符串转换为boolean类型

实例:

public class Test {
	public static void main(String[] args) {
		// 通过连接字符串将基本类型转换为String类型
		int num1 = 10;
		double num2 = 3.14;
		boolean boolean1 = true;
		String sNum1 = "" + num1;
		String sNum2 = "" + num2;
		String sBoolean1 = "" + boolean1;
		// 通过valueOf(基本类型数据 变量名)方法将基本类型转换为String类型
		int num3 = 10;
		double num4 = 3.14;
		boolean boolean2 = true;
		String sNum3 = String.valueOf(num3);
		String sNum4 = String.valueOf(num4);
		String sBoolean2 = String.valueOf(boolean2);
	}
}

说明:

  • 本例中的转换方法均无需对应类型的变量,直接使用类名即可调用
  • 字符串与char类型的转换可以通过字符串的charAt(int index)方法完成。如下例:
public class Test {
	public static void main(String[] args) {
		// 通过连接字符串将基本类型转换为String类型
		int num1 = 10;
		double num2 = 3.14;
		boolean boolean1 = true;
		String sNum1 = "" + num1;
		String sNum2 = "" + num2;
		String sBoolean1 = "" + boolean1;
		// 通过valueOf(基本类型数据 变量名)方法将基本类型转换为String类型
		int num3 = 10;
		double num4 = 3.14;
		boolean boolean2 = true;
		String sNum3 = String.valueOf(num3);
		String sNum4 = String.valueOf(num4);
		String sBoolean2 = String.valueOf(boolean2);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值