我想 我只道 count的意思吧 你应该只道 equals()方法 是用来比较字符串是否相等吧 String s="ss";
String a="dd";s.equals(a);count 就是a的长度了!
----------------解决方案--------------------------------------------------------
equals比较的是string的内容。而没有重写的equals方法跟“==”表达式是一样的,比较的是引用。
if (this == anObject) {
return true;
}
是为了比较是否是同一个引用,假如是同个引用,则返回true,否则返回false。这是为了提高速度而写的判断语句。比如:
String a = new String("adfadfsdfadsfadfasdfadfdsf");
String b = a;
因为a和b是同个引用,所以不需要去判断它的内容,就知道a==b;
if (anObject instanceof String) {
这句主要是判断是否是String的实例,如果不是String的实例,那么跟String比较肯定是不相等的。
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;
}
String的存储结构是一个char数组,也就是value,上面的程序就是循环比较数组的内容是否相等。
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
学习了,这个函数instanceof是干什么用的?还有
能解释一下这段代码吗? int n = 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;
没看懂~~~
----------------解决方案--------------------------------------------------------
因为有些很底层的源码是看不到怎么实现的,,估计就是看到了,也会更迷茫。。。以下是猜想
int n = count;//当前字符串的count
if (n == anotherString.count) { // 如果当前字符串的字符数 == 要比较的字符数
char v1[] = value;//当前字符串的 包含的所有 字符组成的数组 value
char v2[] = anotherString.value;//要比较的字符串的 包含的所有 字符组成的数组 value
int i = offset;// 看到下面要处理 i++ 值应该是0吧 offset:通过看jdk的API文档 可以看出就是 第一个索引的意思,那么值就是0
int j = anotherString.offset;//原理同上
while (n-- != 0) {// --在右边,先执行整个表达式,再--,, 意:第一次是 当前字符串的字符数不为0,执行循环,下次就是 减1 不为0 才执行,,以后类推
if (v1[i++] != v2[j++])//++在右边也是先执行整个表达式,再++ 意:第一次是 v1[i] 和v2[j]比较,下次是 v1[i+1]和v2[j+1]比较,,以后类推
return false;//上面 比较某个相同位置的字符 值不等时,return false
[ 本帖最后由 zongshi123 于 2011-3-28 01:51 编辑 ]
----------------解决方案--------------------------------------------------------
。。。。。。。。。。原来可以再编辑。。这,还是编辑上面的吧
----------------解决方案--------------------------------------------------------
不懂!
----------------解决方案--------------------------------------------------------
麻烦大侠看看这个链接,也是我发的帖子,没有人知道啊~~~
http://bbs.bccn.net/thread-334940-1-1
----------------解决方案--------------------------------------------------------
String a="dd";s.equals(a);count 就是a的长度了!
----------------解决方案--------------------------------------------------------
equals比较的是string的内容。而没有重写的equals方法跟“==”表达式是一样的,比较的是引用。
if (this == anObject) {
return true;
}
是为了比较是否是同一个引用,假如是同个引用,则返回true,否则返回false。这是为了提高速度而写的判断语句。比如:
String a = new String("adfadfsdfadsfadfasdfadfdsf");
String b = a;
因为a和b是同个引用,所以不需要去判断它的内容,就知道a==b;
if (anObject instanceof String) {
这句主要是判断是否是String的实例,如果不是String的实例,那么跟String比较肯定是不相等的。
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;
}
String的存储结构是一个char数组,也就是value,上面的程序就是循环比较数组的内容是否相等。
----------------解决方案--------------------------------------------------------
以下是引用付政委在2011-3-6 12:48:27的发言:
我不太懂 但是可以说点
先问你 你知道什么时候用equals吗?
你知道equals是做什么比较的吗?
何必说
String s="dd";
String a="dd";
要判断这两个是否相等的时候就用到equals方法了!
equals 它里面做的事情、基本就是判断堆空间里的内容是否相等!
栈,堆,静态区 懂吗?
貌似在国外的一本教材上看到,java在编译时地对字面量进行优化,也就是这样定义s和a的话,它们是会指向同一个地址的,也就是如果这样写的话可以用s==a来判断。而如果用s = new String("dd"); a= new String("aa");则需要用到equals方法。 我不太懂 但是可以说点
先问你 你知道什么时候用equals吗?
你知道equals是做什么比较的吗?
何必说
String s="dd";
String a="dd";
要判断这两个是否相等的时候就用到equals方法了!
equals 它里面做的事情、基本就是判断堆空间里的内容是否相等!
栈,堆,静态区 懂吗?
----------------解决方案--------------------------------------------------------
学习了,这个函数instanceof是干什么用的?还有
能解释一下这段代码吗? int n = 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;
没看懂~~~
----------------解决方案--------------------------------------------------------
因为有些很底层的源码是看不到怎么实现的,,估计就是看到了,也会更迷茫。。。以下是猜想
int n = count;//当前字符串的count
if (n == anotherString.count) { // 如果当前字符串的字符数 == 要比较的字符数
char v1[] = value;//当前字符串的 包含的所有 字符组成的数组 value
char v2[] = anotherString.value;//要比较的字符串的 包含的所有 字符组成的数组 value
int i = offset;// 看到下面要处理 i++ 值应该是0吧 offset:通过看jdk的API文档 可以看出就是 第一个索引的意思,那么值就是0
int j = anotherString.offset;//原理同上
while (n-- != 0) {// --在右边,先执行整个表达式,再--,, 意:第一次是 当前字符串的字符数不为0,执行循环,下次就是 减1 不为0 才执行,,以后类推
if (v1[i++] != v2[j++])//++在右边也是先执行整个表达式,再++ 意:第一次是 v1[i] 和v2[j]比较,下次是 v1[i+1]和v2[j+1]比较,,以后类推
return false;//上面 比较某个相同位置的字符 值不等时,return false
[ 本帖最后由 zongshi123 于 2011-3-28 01:51 编辑 ]
----------------解决方案--------------------------------------------------------
。。。。。。。。。。原来可以再编辑。。这,还是编辑上面的吧
----------------解决方案--------------------------------------------------------
不懂!
----------------解决方案--------------------------------------------------------
回复 6楼 六戒书生
很感谢大侠的帮助,学习了很多~~~~正在研究中... ...麻烦大侠看看这个链接,也是我发的帖子,没有人知道啊~~~
http://bbs.bccn.net/thread-334940-1-1
----------------解决方案--------------------------------------------------------