Java里String类的字符串比较、两种实例化方式的比较、字符串连接的方法

Java 专栏收录该内容
10 篇文章 0 订阅

字符串比较

字符串比较有四种常用方法:

(一)比较字符串里的内容,返回布尔型的值

1.public boolean equals(String anObject)(判断时区分字母大小写)
2.public boolean equalsIgnoreCase(String anotherString)(判断时不区分字母大小写)
public class Java {

	public static void main(String[] args) {
		String stra = "abc";
		String strb = "Abc";
		
		System.out.println(stra.equals(strb));
		System.out.println(stra.equalsIgnoreCase(strb));//忽略字母大小写
	}

}

输出结果:
false
true

(二)比较字符串里的内容,返回整型变量(依次比较两个字符串里的字符的编码并返回两个字符串编码的差值)

1.public int compareTo(String anotherString)(判断时区分字母大小写)
2.public int compareToIgnoreCase(String str)(判断时不区分字母大小写)
public class Java {

	public static void main(String[] args) {
		String stra = "abc";
		String strb = "Abc";
		String strc = "abc";
		
		System.out.println(stra.compareTo(strc));//"abc"与"abc"比较
		System.out.println(stra.compareTo(strb));//"abc"与"Abc"比较
		System.out.println(strb.compareTo(stra));//"Abc"与"abc"比较
		
		System.out.println(stra.compareToIgnoreCase(strb));//"abc"与"Abc"比较,忽略字母大小写
	}

输出结果:
0
32
-32
0

(三)第三种方法比较特殊,比较的不是字符串里的内容,而是比较字符串的堆内存地址,返回值也是布尔型

在String上使用“==”进行判断
public class Java {

	public static void main(String[] args) {
		String stra = "abc";
		String strb = "abc";
		String STRA = new String("abc");
		String STRB = new String("abc");
		//两种实例化方法会在下文解释有什么不同
		
		System.out.println(stra == strb);
		System.out.println(stra == STRA);
		System.out.println(STRA == STRB);
	}

}

输出结果:
true
false
false

两种实例化方法的比较

(一)构造方法进行实例化

		String STRA = new String("abc");

因为使用了关键字new,所以每次使用都会开辟新的堆内存空间用来存放字符串数据。因为每一个字符串都是String类的匿名对象,所以其首先会开辟一块堆内存空间用来存放字符串,然后又使用关键字new来开辟另一块堆内存空间,再将字符串存放在这块使用关键字new开辟的堆内存空间里,而之前开辟的那块空间就没用了,会等待回收。所以每次使用构造方法,都会开辟两块空间。
比如执行以下代码:

public class Java {

	public static void main(String[] args) {
		String STRA = new String("abc");
	}

}

开辟堆内存空间的过程:
在这里插入图片描述

(二)直接赋值进行实例化

		String stra = "abc";

第一次直接赋值进行实例化会开辟一块堆内存,并将字符串常量保存在这块空间里;再次进行直接赋值时,如果与上次赋值的字符串是同一串字符串,则会实现对堆内存空间的重用,不会开辟新的堆内存空间。
比如执行以下代码:

public class Java {

	public static void main(String[] args) {
		String stra = "abc";
		String strb = "def";
		String strc = "abc";
	}

}

开辟堆内存空间的过程:
在这里插入图片描述
所以在进行字符串比较时使用“==”,相同的字符串会返回false值。因为使用构造方法实例化同一串字符会存储在不同的堆内存空间中,而这个方法比较的是两个字符串的堆内存地址。

字符串连接的方法

(一)

public String concat(String str)
public class Java {

	public static void main(String[] args) {
		String stra;
		String strb;
		String strc = "abc";
		String strd;
		
		stra = "abc".concat("def");
		strb = "abc".concat("def").concat("ghi");//可以连续调用此方法连接字符串
		strd = strc.concat("def");
		
		System.out.println(stra);
		System.out.println(strb);
		System.out.println(strd);
	}

}

输出结果:
abcdef
abcdefghi
abcdef

(二)
使用“+”进行字符串的连接

public class Java {

	public static void main(String[] args) {
		String stra = "abc";
		String strb;
		String strc;
		String strd;
		
		strb = stra + "***";
		strc = "abc" + "***";
		strd = "***" + stra;
		
		System.out.println(strb);
		System.out.println(strc);
		System.out.println(strd);
	}

}

输出结果:
abc***
abc***
***abc

  • 0
    点赞
  • 3
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 3 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

NightReality

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值