当前位置:首页 » 操作系统 » stringequals源码

stringequals源码

发布时间: 2022-07-29 10:25:40

1. api中怎么看equals 和string的源码

在你的%java_HOME%\src.zip里面,你把那里面的源文件解压一下,就可以看到.java文件了

2. 关于java的String类的equals方法的源码

比的是n!=0 然后n=n-1

你可以理解为

for(n=n;n>0;n--){

}

3. C# string类型的Equals方法

比较的是值。下面是用Reflector反编译出来的String类的部分源码,供参考:
[ReliabilityContract(Consistency.WillNotCorruptState,
Cer.MayFail)]
public
bool
Equals(string
value)
{
if
((value
==
null)
&&
(this
!=
null))
{
return
false;
}
return
EqualsHelper(this,
value);
}
主要的是EqualsHelper这个方法的实现,具体如下:
[ReliabilityContract(Consistency.WillNotCorruptState,
Cer.MayFail)]
private
static
unsafe
bool
EqualsHelper(string
strA,
string
strB)
{
int
length
=
strA.Length;
if
(length
!=
strB.Length)
{
return
false;
}
fixed
(char*
str
=
((char*)
strA))
{
char*
chPtr
=
str;
fixed
(char*
str2
=
((char*)
strB))
{
char*
chPtr2
=
str2;
char*
chPtr3
=
chPtr;
char*
chPtr4
=
chPtr2;
while
(length
>=
10)
{
if
((((*(((int*)
chPtr3))
!=
*(((int*)
chPtr4)))
||
(*(((int*)
(chPtr3
+
2)))
!=
*(((int*)
(chPtr4
+
2)))))
||
((*(((int*)
(chPtr3
+
4)))
!=
*(((int*)
(chPtr4
+
4))))
||
(*(((int*)
(chPtr3
+
6)))
!=
*(((int*)
(chPtr4
+
6))))))
||
(*(((int*)
(chPtr3
+
8)))
!=
*(((int*)
(chPtr4
+
8)))))
{
break;
}
chPtr3
+=
10;
chPtr4
+=
10;
length
-=
10;
}
while
(length
>
0)
{
if
(*(((int*)
chPtr3))
!=
*(((int*)
chPtr4)))
{
break;
}
chPtr3
+=
2;
chPtr4
+=
2;
length
-=
2;
}
return
(length
<=
0);
}
}
}
可见比较的绝对是值,而不是引用。
比较引用的话
strA
==
strB就行了(其实呢,==运算符重载也是调用了下面的静态Equals方法),下面的源码就比较典型,比较引用(引用相同,值必相同)也比较值。
public
static
bool
Equals(string
a,
string
b)
{
return
((a
==
b)
||
(((a
!=
null)
&&
(b
!=
null))
&&
EqualsHelper(a,
b)));
}
public
static
bool
operator
==(string
a,
string
b)
{
return
Equals(a,
b);
}
不知这个回答可以否?
更正一点,Contains方法中没有用到Equals方法,源码如下:
public
bool
Contains(string
value)
{
return
(this.IndexOf(value,
StringComparison.Ordinal)
>=
0);
}
不过确实也是逐字符比较的,比较的是值。

4. Java,求Object的equals源代码

"同一个对象的应用"
其实是指两个对象的内容一样。"equals"可以理解为两个对象引用所指向的内容相同;"=="是指对象引用相同
;例如:string
str1=new
string("abc");string
str2=str1;string
str3=new
string("abc");string
str4=new
string("abc");str1==str2;为true,因为str1,str2都指向同一个"abc";str1.equals(str2);为true,因为str1,str2所指内容一样就是"abc";str1==str3;为false,因为str3
又new了一块新内存空间来放"abc",str1和str3不是指向同一个"abc";str1.equals(str3);为true,因为str1,str3所指内容一样就是"abc";str1==str4;为false,因为str1和str4指向不同;str1.equals(str4);为false,因为str1,str4所指内容不一样,一个是"abc"
一个是"abc"

5. .equals()到底是什么意思

.equals() 在Java中判断是否相等,与 == 的区别是 .equals() 只判断值是否相等,不管两者是否存在同一地址。而 == 则是判断值与存在地址都得相等

(5)stringequals源码扩展阅读:

由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,但是没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非我们在此类中重写equals。

另外,"=="比"equals"运行速度快,因为"=="只是比较引用。

6. String equals方法的疑问

String s2="123456789".substring(1,6);

这句代码执行时,会在字符串缓存池中建立一个新的字符串,值为“23456”,并让s2指向这个值。
执行完之后,s2也是“23456”,原来s1也是“23456”。
因为s1和s2引用的位置不同,所以s1 == s2返回false
因为s1和s2的值相同,所以s1.equals(s2)返回true

7. 关于JAVAString类equals方法的源代码

Sting创建的是两个对象,一个是存在常量池中,还有一个是存在对象栈中。

8. JAVA中equals的用法

String类对equals()方法进行了覆盖,只要引用指向的对象的内容是一样的就认为他们相等。你可以看一下String的equals()的源码:

publicbooleanequals(ObjectanObject){
if(this==anObject){
returntrue;
}
if(anObjectinstanceofString){
StringanotherString=(String)anObject;
intn=value.length;
if(n==anotherString.value.length){
charv1[]=value;
charv2[]=anotherString.value;
inti=0;
while(n--!=0){
if(v1[i]!=v2[i])
returnfalse;
i++;
}
returntrue;
}
}
returnfalse;
}


而Object类默认的equals()方法就是比较两个引用指向的对象本身,如果指向同一个对象,那就认为他们是相等的,否则不相等,除非你像String类那样对其进行覆盖重写。

9. 在java中String中的equals方法的源代码有很多不懂啊求大神解惑!!

anObject instanceof String;
首先上边的语句,先判断anObject是不是String类的一个实例,如果是运行下边的语句
String anotherString = (String)anObject;
字符串是一个引用数据类型,本身是String个对象,
在这里把传进来的anObject这个对象,赋给anotherString (需要类型转换)
他当然可以调用String类里的成员,你说的count、value、offset都是String的成员
int n = count;//这个count是原始字符串的长度
if (n == anotherString.count) { //把字符串长度和要比较的字符串长度对比,长度都不同的话就不用比字符串内容了
char v1[] = value;//把原始字符串义字符形式存入数组
char v2[] = anotherString.value; //把要比较字符串义字符形式存入数组
int i = offset;//数组下标
int j = anotherString.offset; //????
while (n-- != 0) { //遍历数组,比较 数组元素是否相同
if (v1[i++] != v2[j++])
return false;//在遍历的过程中如果有不同的就返回false;
} //你如果用过equals这个方法应该知道它返回的是boolean值
return true;
}
}
return false;
}

热点内容
android使用at命令 发布:2025-01-18 20:54:51 浏览:216
phptiny 发布:2025-01-18 20:54:03 浏览:987
怎么给汉字加密 发布:2025-01-18 20:49:44 浏览:865
遍历javamap 发布:2025-01-18 20:39:05 浏览:624
我的世界租服务器哪里最便宜 发布:2025-01-18 20:38:50 浏览:564
dhcp服务器地址租期时间怎么调整 发布:2025-01-18 20:28:02 浏览:267
加密区的图片 发布:2025-01-18 20:22:17 浏览:474
key文件加密 发布:2025-01-18 20:12:07 浏览:736
etl服务器怎么用 发布:2025-01-18 20:08:18 浏览:281
硫酸镁算法 发布:2025-01-18 19:53:00 浏览:670