java中字符串的比较

一、字符串比较

其实呢,字符串的比较没什么好讲的,但是java中还是值得比较注意的(尤其是对于C转java的人)

首先我们学过C的都知道字符串的比较是用strcmp();且不能够用“==”,但是java中是可以,但是也不是说完全可以,什么意思呢,下面我来举个列子:

package StringProctice;
import java.util.Scanner;
public class StrTest {
	public static void main(String[] args) {
		String a = "abcdefg";
		String b = new String(a);
		System.out.println(a == b);//输出false虽然两者的内容是一样的但是不是同一个对象
		String c = "abcdefg";
		System.out.println(a == c);//输出true因为创建c时候发现有现成的字符串就会拿来用
		
		
		
	}
		
}

大家可以看到第一个输出,输出的是false,这时候编译器对比的不是两个字符串的内容而是两个实例对象是否等价,好比C中的指针,p==q,尽管p和q中内容是一样但是指向的地址是不一样的啊!

好的,大家看到第二次输出,为什么是true呢?这个时候因为a已经指向了一段字符串,也就说这段字符串已经在内存中有了一块区域,既然有了区域了,下次创建c指向的时候自然直接指向这块区域就行了,既然指向的区域都是这个,输出的就是true了

那么像第一种情况应该怎么进行比较呢?也就是比较两者的内容。

二、比较内容-equals

好,现在我们把上面的第一次输入System.out.println(a == b);改成System.out.println(a.equals(b));这时候输出的就是true了,这是因为equals比较的是两字符串的内容。

--------------------------以上其实就是新手入门java时候需要注意到的一点,另外在下面补充一下今天我遇到的一个问题-----------------------

很有趣的一个问题,我学了几年C/C++,对于java是初学者,今天编程的时候,我定义了一个字符数组c,然后我想以字符串的形式输出

写道:System.out.println(c);  是的这个代码确实没有任何的问题,但是我想跳过前面两个字符不输出,直接从c[2]开始输出,然后我就写出了:System.out.println(c+2); 如果你是C语言编程者你会发现很正常并没有什么错误啊,但是对于java来说编译器会报错:字符数组不能与整数相加,是的,后来我才明白,原来java中的指针是不能偏移的。

猜你喜欢

转载自blog.csdn.net/xdxx152/article/details/82183691