以前都没怎么注意! 谁能告诉我if(a==b) 和 if("a".equals("b")) 有什么差别!比如 当a b为String的时候
当a b为对象的时候
当a b为int类型的时候我都应该用哪个!!!!
当a b为对象的时候
当a b为int类型的时候我都应该用哪个!!!!
解决方案 »
- 创建SESSION 参数问题
- 提交到一个servlet 想执行2次查询SQL语句 取不同的值 如何实现??
- web应用程序与EJB部署问题
- 有没有人可以不用第三方组件处理文件上传(纯Servlet)
- 如何在hibernate中得到mysql中某一表a的当前序列号
- 请教如何使用WebLogic
- java.net.socketTimeoutException:read timed out?
- 关于项目打包成EAR发布的问题?????????????
- 请问:谁有《J2EE应用与BEA Weblogic Server》的配套光盘,能否把盘上的例子发给我。
- eclipse jee-oxygen v4.7.1版本编辑HTML文件无法自动补全问题
- 为什么我每次deploye就出错而且数据库会被清空?
- 为什么我使用了延迟加载过滤器,仍然出现session is closed的异常
如果是int的话 用 ==
如果是对象的话 也是用equals????
if("a".equals("b")) 判断的是内容
就回答你的问题吧,
当ab为string的时候,用equal;
当ab为int的时候,用==;
当ab为对象的时候,具体情况具体分析。
如果是int的话 用 ==
如果是对象的话 也是用equals????
==判断的时候要求对象完全相同
如果是int的话:==判断相不相等了
equals 要看那个类 的这个方法是怎么写的。不能说一定是比较内容,这样说不准确
== 和equals返回的都是boolean值,但比较方式上,前者没有重写,而equals可以重写。
一般来说 比较两个对象是否指向同一个引用==
equals则用于判断两个对象值是否相同,这个取决于程序员或是项目的怎么写equals的规范。
(1)a==b,是指引用地址一样,两个是同一个对象
(2)a.equals(b)只是值一样2.如果是基本类型(如int)
只能用a==b,没有引用地址的概念
"a".equals("b"); 是内容对比
1.如果你想把编程学习好,首先要把基础的东西看好!这些事很基础而且是很重要
2.这些问题先google or baidu.
当a、b为基本的数据类型是比较的是数值
当a、b为对象时比较的是是否是同一个应用,说白了就是看是不是同一个内存地址
if("a".equals("b"))
一般就是两个对象进行比较,equals(Object)方法出自Class Object{},而每一个对象类型都继承自Object,你想怎么比较,你就可以在你定义的Class中重写equals(Object)方法,想怎么比较就怎么比较
2. a,b 为object时,注:String也是对象类型,此时为引用类型,用equals比较两个对象的内容,如果用“=”等于号比较两个object,则是对两个对象的内存地址做比较,看是否是同一引用对象。
.equals 判断的是两个对象的值是否相同
你只要知道:equals方法是Object类的一个方法,而String重写了那个方法具体实现如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
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;
}
return true;
}
}
return false;
}
其中 count:the number of characters in the String(该String的字符数量)
value:The value is used for character storage(是一个char数组,就是这个String的每个字符组成的数组)
offset:the first index of the storage that is used(value数组的当前下标)
注:String的这三个成员变量都是私有的最终变量,所以String是不可变的
重上面我们可以看出,String a,b如果equals 那么他们必需是一模一样的两个字符串而==这个符号指的是地址相同,即:如果是基本类型,则其值相同。如果是对象类型,则a,b必需指向同一个对象,也就是:如果a= new Object();
使b==a的唯一条件是:b=a(即把a的引用地址付给b)
但是对于String a="123"; String b ="123";这种特殊的对象类型声明方式,其内存解析如下:
在内存的常量区分出一块内存存放"123",把声明的变量a指向这个"123",而把声明的变量b也指向了这个"123" 所以 a==b是正确的
如果是:String a = new String("123"); String b = new String("123");
这样a==b就是错的了
equals方法是判断字符是不是一致,"=="是判断是不是同一个对象.
equals是指字符串
a,b 为 int时,此时为值类型,用 “=”等于号比较值
a,b 为object时,注:String也是对象类型,此时为引用类型,用equals比较两个对象的内容,如果用“=”等于号比较两个object,则是对两个对象的内存地址做比较,看是否是同一引用对象。
String b="abc";
int a1=1;
int b1=1;
a.equals(b)成立但是a==b不成立;
a1.equals(b1)成立但是a1==b1也成立;
如果a.equals(b)成立,a==b不一定成立;
如果a==b成立,a.equals(b)一定成立;
凭自己感觉呵呵
if( a.equals(b))你可以重写a中的equals方法,因为如果你用的是a继承Object的equals方法等同于用 a == b,如果你是用的java的类库中的方法,可以看看其源码equals的实现,一般情况下如果类内的成员变量相等表示其相等如 String a = "abc";
String b ="abc";
a.equals(b) 为 true;
沾楼主的光抛个疑问: 我经常用 f(object_A==null){...}那这里就是比较 object_A 和 null的地址是否来自同
一个地址了。
只是不知道这个null的地址怎么算来着呢?
== 比较的是地址
equals 比较的是内容对于基本数据类型来说 == 比较的是内容 因为他们地址都在栈中 只要内容相等 就会相等!无equals方法
但是 如String a=“123”; 此时他只有栈地址 没有堆地址!
对于其他数据类型 包括String == 比较的是内容+地址! 就是判断2个对象的堆地址是不是一样的!
而equals判断的是内容!!!!!!!!!!String a="123"; String a=new String(“dd”);
String b="123" String b=new String(“dd”);
a==b a。equals(b)是对的 a==b是错的 a.equals(b); 是对的!
当a b为对象的时候 用==
当a b为int类型的时候 用==