字符串变量内容的比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串变量内容的比较相关的知识,希望对你有一定的参考价值。
不是2个对象而是普通字符串变量
参考技术A 可以用equals方法比较两个字符串对象的内容是否相等,比如String a = "hello";
String b = "hello";
if(a.equals(b))
System.out.println("相等");
else
System.out.println("不相等");
不能够通过“==”比较两个字符串内容的值是否相等,“==”比较的是两个字符串的内存地址 参考技术B a.equals(b)
a,b是两个字符串。。
可以查看api:http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html
参考资料:http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html
本回答被提问者采纳 参考技术C int mystrcmp(char *str1,char *str2)if(str1 == NULL || str2 == NULL)
return -1;
while(*str1++ && *str2++ )
if( *str1 > *str2)
return 1;
if( *str1 < *str2 )
return -1;
if(*str1)
return 1;
if(*str2)
return -1;
return 0;
==和equals的区别案例+解析
什么理论也先不说,代码先给大家看下:
接下来:用一句话总结==和equals的区别
==号比较的是内存地址 || equals()比较的是字符串的内容
解析:
A ==操作符专门用来比较两个变量的值是否相同,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等
只能用==操作符。
B equals方法用来比较两个独立对象的内容是否相同,两条new语句创建了两个对象,然后用s3,s4两个变量分别指向其中的一个对象,这是两个不同的对象,它们的
首地址是不同的,就是说s3,s4中存储的数值是不同的,所以表达式s3==s4将返回false,而两个对象中的内容是相同的,所以s3.equals(4)返回了true。
【字符串的比较基本上都是使用equals方法。
如果一个类没有自己定义的equals方法,那么ta将继承Object类的equals方法,Object类的的实现代码如下:
boolean equals(Object o)
{
return this==o;
}
这说明如果一个类没有自己定义的equals方法,ta默认的equals方法,等同于使用==操作符,也就是比较两个变量指向的对象是同一个对象。这时候使用equals和==
会得到相同的结果!!s1==s2和s1.equals(s2)都是true。如果希望写的类能够比较两个实例对象的内容是否相同,则需要覆盖equals方法!!
】
最后总结:
1.对于基本数据类型,只有==,没有equals()(注意String类型不是基本数据类型),所以很明显值相等就为true。
2.对于字符串,==指比较两者的内存地址,equals()则重写了Object类的equals(),比较的是内容,你可以查看API看看它怎么重写的。对于字符串是存放在方法区的字符串常量池里的,无论定义多少,只要字符串值相等都指同一块内存地址,所以==和equals()结果没区别。
3.对于实例对象而言,==比较的依然是内存地址(所以你可以看出无论什么情况,==一直比较的都是内存地址),而equals()默认重写Object类的equals()方法(比较地址)。但是一般我们会自己重写equals(),让它比较值是否相等。
4.建议:学完“内存地址”和“重写”的内容,再回过头来看这一知识点。
附加总结:
而java的8大基本数据类型分别是:
数据类型 大小 范围 默认值
byte(字节) 8 -128 - 127 0
shot(短整型) 16 -32768 - 32768 0
int(整型) 32 -2147483648-2147483648 0
long(长整型) 64 -9233372036854477808-9233372036854477808 0
float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
char(字符型) 16 ‘ \\u0000 - u\\ffff ’ ‘\\u0000 ’
boolean(布尔型) 1 true/false false
分类为:
逻辑类 boolean
文本类 char
整数类 byte, short, int, long
浮点类 double, float。
String是最基本的数据类型吗?
String类并不是基本数据类,而是一个类(class),是C++、java等编程语言中的字符串。String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。
好了,这个知识点就总结到这里吧,小编在走之前,把上面的代码给大家粘贴过来吧,这省了部分人不少时间...哈哈
public static void main(String[] args) {
String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java");
String s4 = new String("Java");
//1、==两个字符串@新建对象之前比较
System.out.println("s1==s2:"+(s1==s2));
//2、==字符串与新建对象比较
System.out.println("s1==s3:"+(s1==s3));
//3、==两个字符串@新建对象之后比较
System.out.println("s3==s4:"+(s3==s4));
//1、equals两个字符串@新建对象之前比较
System.out.println("s1.equals(s2):"+(s1.equals(s2)));
//2、equals字符串与新建对象比较
System.out.println("s1.equals(s3):"+(s1.equals(s3)));
//3、equals两个字符串@新建对象之后比较
System.out.println("s3.equals(s4)"+(s3.equals(s4)));
}
以上是关于字符串变量内容的比较的主要内容,如果未能解决你的问题,请参考以下文章