A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 余威宏 于 2013-5-9 19:50 编辑

我感觉“==”跟“equals()”都是用来比较两个对象的啊,但是在什么情况下用“==”什么情况下用“equals”呢? 它们之间到底有什么区别啊?
这点在学习中总是容易弄糊涂,不是太清楚,请大家指教一下,最好能举个例子说明一下,谢谢!

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

13 个回复

倒序浏览
先占沙发
回复 使用道具 举报
尹桥印 发表于 2013-5-8 20:15
呃,
==可用于基本类型和引用类型:
当用于基本类型时候,是比较值是否相同。

回答的真好。学习啦
回复 使用道具 举报
潘贵 来自手机 中级黑马 2013-5-8 21:01:42
板凳
想补充一点,equals();方法是可以被复写的,比较的内容视复写的内容而定
回复 使用道具 举报
尹桥印 发表于 2013-5-8 20:19
沙发你是抢不过我的~~

见识了。。。。佩服啊。。。偷偷地告诉我。。如何》》
回复 使用道具 举报
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!(不要嫌我烦,我感觉也挺烦躁的。这是我的责任啊)
回复 使用道具 举报
尹桥印 发表于 2013-5-8 21:24
如果我把我抢沙发的方法告诉你,你会不会给我技术分?~~放心。。这个方法再怎 ...

好啊好啊。。。
打印十字图
http://bbs.itheima.com/thread-49153-1-1.html

做吧。。。如果第一个是你。。最少两分。。
回复 使用道具 举报
尹桥印 发表于 2013-5-8 21:37
版主。。。你这是在坑我呐

我怎么坑你了。。。天地良心啊。。
回复 使用道具 举报
equals和==的区别
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
回复 使用道具 举报
本帖最后由 杨兴庭 于 2013-5-8 22:10 编辑

equals()是String中比较两个字符串的值是否相等的方法,下面是String的常用方法(有equals()详细的用法):

1. 计算字符串的长度。

     name.length()   变量名. Lenth()的方式计算字符串的长度

2. 比较字符串长度是否相同

⑴区分大小写比较:

A. equals(B)         

变量A与变量B中字符串是否相容

假如A中是java, B中是JAVA ,则A不等于B



⑵不区分大小写

A. equals(B)        变量A与变量B中字符串是否相容

假如A中是java, B中是JAVA ,则A等于B


3.字符串的链接


Concat()方法

例如: String  C=A.concat(B);

将B的字符串追加到A得后面


4.字符串的提取

变量中字符串从0开始,空格也算一个字符。


例句:String words=”hello world wthis is my App”;


int  A=words.indexof(“w”);

提取w在words中的位置,5

int  A=words.lastIndexof(“w”);

提取最后一个w在words中位置,11


String B=words.subString(5);

提取在words中>=5的字符串,world wthis is my App


String C=words.trim(words)

取出words中首位空格



equals()用法实例:
输入会员号后四位数,如果百位上数与系统产生随机数一样,就是幸运客户奖励Mp3一台

System.out.println("购物管理系统 > 幸运抽奖\n\n");

System.out.println("\n");

Scanner input=new Scanner(System.in);


String answer;    // 接受用户指令变量

do{

int number=(int)(Math.random()*10);    //随机产生1到10之间的整数

System.out.println("请输入四位会员号码:");


int id=input.nextInt();

int  luckNum=(int)((id%1000)/100);

System.out.println("幸运数字是"+number);

    if(luckNum==number)

    {

     System.out.println(id+"恭喜你成为幸运客户,送精美MP3一个");

    }

    else

    {

     System.out.println(id+"谢谢你的支持");

     

    }

    System.out.println("是否继续?(y/n)");

    answer=input.next();

   

}

while(!answer.equals("y"));


System.out.println("程序结束");

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杨兴庭 于 2013-5-8 22:57 编辑
小石头39910 发表于 2013-5-8 21:57
equals和==的区别
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址 ...

看到你的回复内容我产生了一些疑问。。。。
亲,你在解释==的时候,说对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同,即可以理解----堆内存存储地址,栈内存存储内容即数据,==是比较两个变量首先比较在堆内存的地址是否相同,然后比较两个变量通过地址在栈内容比较的数据是否相同。应该可以这么理解,
疑问一产生了:变量A和变量B在堆内存中的地址除了在A===B的情况下相同,那一般情况下内存给两个变量分配的内容肯定是不同的,那么像小石头上面阐述的分析首先比较两个变量在堆内存的地址是相同。然后比较两个变量在栈内存中的数据是否相同,加入A,B在内存中分配地址是1,2这两个不同空间,变量A,B对应栈内存中的数据都是3,这时变量A,B内存地址不同,存储数据相同,那么此时A,B变量是否==呢?

第二点疑问:equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。疑问产生就是在即堆中内容是否相同,应该可以理解堆内存中存的是两个变量需要比较的内容即数据,也应该可以理解堆内存中存的是数据,再看下标注的红色字体内容,我的疑问就是到底是堆内存中存储变量数据,栈内存存储相对应指针,还是堆内存存数变量指针,栈内存存储指针对应数据?

此回复并没有任何针对意思,也忘小石头同学不要生气,却是是在看了回复后产生了这两个疑问搞不明白,也希望看到此回复的黑马友人有明白的帮忙解答下,大家彼此互相学习,共同提高。。。

回复 使用道具 举报
杨兴庭 发表于 2013-5-8 22:55
看到你的回复内容我产生了一些疑问。。。。
亲,你在解释==的时候,说对于引用型变量表示的是两个变量在堆 ...

堆内存中存储变量数据(用new创建的东西);
栈内存存储相对应的指针。
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!(不要嫌我烦,我感觉也挺烦躁的。这是我的责任啊)
回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
回复 使用道具 举报
好的,明白了,谢谢大家的帮助!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马