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

字符串比较

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

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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值