- 浏览: 33953 次
- 性别:
- 来自: 苏州
-
最新评论
-
potato_hi:
A a = new A();
a 也是一个引用吧? 只是它指 ...
Java Stack Heap Static Method -
luckybat:
类用来描述“是什么”,接口用来描述“能干什么”。
Java Interface & Abstract Class -
JustDoNow:
很详细,我现在相信你的说法
String Pool,String a=new String("abc"); -
linshenqi:
讲解得很强大。
Java Interface & Abstract Class
1、= =操作符比较的是操作符两端的操作数是否是同一个对象;另外= =操作符两边的操作数必须是同一类型的(可以是父子类之间)才
能编译通过。
2、String的equals()方法比较的是两个String对象的内容是否一样
3、= =比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为TRUE,如:
int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆栈;如下题111;
String s= "hello";
String t = "hello";
char c[] = {'h','e','l','l','o'}
Which return true?
A. s.equals(t);
B. t.equals(c);
C. s==t;
D. t.equals(new String("hello"));
E. t==c.
答案:(acd)
题目:哪些返回true。
这个在前面第10题的equals()方法和==操作符的讨论中论述过。==操作符比较的是操作符两端的操作数是否是同一个对象,而String的
equals()方法比较的是两个String对象的内容是否一样,其参数是一个String对象时才有可能返回true,其它对象都返回假。需要指出的是由
于s和t并非使用new创建的,他们指向内存池中的同一个字符串常量,因此其地址实际上是相同的(这个可以从反编译一个简单的测试程
序的结果得到,限于篇幅不列出测试代码和反编译的分析),因此答案c也是正确的。
Given the following class:
public class Sample{
long length;
public Sample(long l){ length = l; }
public static void main(String arg[]){
Sample s1, s2, s3;
s1 = new Sample(21L);
s2 = new Sample(21L);
s3 = s2;
long m = 21L;
}
}
Which expression returns true?
A. s1 == s2;
B. s2 == s3;
C. m == s1;
D. s1.equals(m).
答案:(b)//D不对,只有String的equals()方法才比较值;
题目:给出下面的类: …
哪个表达式返回true。
前面已经叙述过==操作符和String的equals()方法的特点,另外==操作符两边的操作数必须是同一类型的(可以是父子类之间)才能编译通
过。
再看以下几道
17. float f=4.2F;
Float g=new Float(4.2F);
Double d=new Double(4.2);
Which are true?
A. f= =g B. g= =g C. d= =f D. d.equals(f) E d.equals(g) F. g.equals(4.2);
答案:B
93. Click the exhibit button:
1. public class X {
2. public static void main (String[]args) {
3. String s1 = new String (“true”);
4. Boolean b1 = new Boolean (true);
5. if (s2.equals(b1)) {
6. System.out.printIn(“Equal”);
7. } 8. } 9. }
What is the result?
A. The program runs and prints nothing.
B. The program runs and prints “Equal.”
C. An error at line 5 causes compilation to fail.
D. The program runs but aborts with an exception.
答案:A
比较下题,小心使用equals 和 = =的区别;
93. Click the exhibit button:
1. public class X {
2. public static void main (String[]args) {
3. String s1 = new String (“true”);
4. Boolean b1 = new Boolean (true);
5. if (s2 = = b1) { //= =操作符两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过
6. System.out.printIn(“Equal”);
7. } 8. } 9. }
What is the result?
A. The program runs and prints nothing.
B. The program runs and prints “Equal.”
C. An error at line 5 causes compilation to fail.
D. The program runs but aborts with an exception.
答案:C
111. Given:
1. public class Foo {
2. private int val;
3. public foo(int v) (val = v;) }
4. public static void main (String [] args) {
5. Foo a = new Foo (10);
6. Foo b = new Foo (10);
7. Foo c = a;
8. int d = 10;
9. double e = 10.0;
10. }
11. }
Which three logical expressions evaluate to true? (Choose Three)
A.(a ==c)
B.(d ==e)
C.(b ==d)
D.(a ==b)
E.(b ==c)
F.(d ==10.0)
答案:ABF //= =比较的是地址,他们都指向地址为10的堆栈;
Given the following code, what test would you need to put in place of
the comment line?
//place test here to result in an output of the string Equal
public class EqTest{
public static void main(String argv[]){
EqTest e=new EqTest();
}
EqTest(){
String s="Java";
String s2="java";//小心大小写
//place test here {
System.out.println("Equal");
}else
{
System.out.println("Not equal");
}
}
}
1) if(s==s2)
2) if(s.equals(s2)
3) if(s.equalsIgnoreCase(s2))
4)if(s.noCaseMatch(s2))
答案:3)//小心大小写
-------------------------------------------------------------------------
一道IBM笔试题(考==与EQUALS的区别)
题目:
Integer i = new Integer(42)
Long l = new Long(42)
Double d = new Double(42.0)
下面哪些返回true
1: i==l
2: i==d
3: l==d
4:i.equals(l)
5:i.equals(d)
6:l.equals(d)
7:i.equals(42)
答案:7;
编码验证:
public class Equivalence {
public static void main(String[] args) {
Integer i = new Integer(42)
Long l = new Long(42)
Double d = new Double(42.0)
System.out.println(i==l);
System.out.println(i==d);
System.out.println(l==d);
System.out.println(i.equals(l) );
System.out.println(i.equals(d) );
System.out.println(l.equals(d) );
System.out.println(i.equals(42));
}
}
运行结果:
1-3:编译不通过;
4-6:false
7:true
原理解释:
呵呵,我从thinking in java电子版中摘了一段:
1. 检查对象是否相等
关系运算符==和!=也适用于所有对象,但它们的含义通常会使初涉Java领域的人找不到北。下面是一个例子:
//: Equivalence.java
public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
} ///:~
其中,表达式System.out.println(n1 == n2)可打印出内部的布尔比较结果。一般人都会认为输出结果肯定先是true,再是false,因为两个
Integer对象都是相同的。但尽管对象的内容相同,句柄却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false
,再是true。这自然会使第一次接触的人感到惊奇。
若想对比两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“
主类型”,那些类型直接使用==和!=即可。下面举例说明如何使用:
//: EqualsMethod.java
public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
} ///:~
正如我们预计的那样,此时得到的结果是true。但事情并未到此结束!假设您创建了自己的类,就象下面这样:
//: EqualsMethod2.java
class Value {
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
} ///:~
此时的结果又变回了false!这是由于equals()的默认行为是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希
望的行为。
能编译通过。
2、String的equals()方法比较的是两个String对象的内容是否一样
3、= =比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为TRUE,如:
int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆栈;如下题111;
String s= "hello";
String t = "hello";
char c[] = {'h','e','l','l','o'}
Which return true?
A. s.equals(t);
B. t.equals(c);
C. s==t;
D. t.equals(new String("hello"));
E. t==c.
答案:(acd)
题目:哪些返回true。
这个在前面第10题的equals()方法和==操作符的讨论中论述过。==操作符比较的是操作符两端的操作数是否是同一个对象,而String的
equals()方法比较的是两个String对象的内容是否一样,其参数是一个String对象时才有可能返回true,其它对象都返回假。需要指出的是由
于s和t并非使用new创建的,他们指向内存池中的同一个字符串常量,因此其地址实际上是相同的(这个可以从反编译一个简单的测试程
序的结果得到,限于篇幅不列出测试代码和反编译的分析),因此答案c也是正确的。
Given the following class:
public class Sample{
long length;
public Sample(long l){ length = l; }
public static void main(String arg[]){
Sample s1, s2, s3;
s1 = new Sample(21L);
s2 = new Sample(21L);
s3 = s2;
long m = 21L;
}
}
Which expression returns true?
A. s1 == s2;
B. s2 == s3;
C. m == s1;
D. s1.equals(m).
答案:(b)//D不对,只有String的equals()方法才比较值;
题目:给出下面的类: …
哪个表达式返回true。
前面已经叙述过==操作符和String的equals()方法的特点,另外==操作符两边的操作数必须是同一类型的(可以是父子类之间)才能编译通
过。
再看以下几道
17. float f=4.2F;
Float g=new Float(4.2F);
Double d=new Double(4.2);
Which are true?
A. f= =g B. g= =g C. d= =f D. d.equals(f) E d.equals(g) F. g.equals(4.2);
答案:B
93. Click the exhibit button:
1. public class X {
2. public static void main (String[]args) {
3. String s1 = new String (“true”);
4. Boolean b1 = new Boolean (true);
5. if (s2.equals(b1)) {
6. System.out.printIn(“Equal”);
7. } 8. } 9. }
What is the result?
A. The program runs and prints nothing.
B. The program runs and prints “Equal.”
C. An error at line 5 causes compilation to fail.
D. The program runs but aborts with an exception.
答案:A
比较下题,小心使用equals 和 = =的区别;
93. Click the exhibit button:
1. public class X {
2. public static void main (String[]args) {
3. String s1 = new String (“true”);
4. Boolean b1 = new Boolean (true);
5. if (s2 = = b1) { //= =操作符两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过
6. System.out.printIn(“Equal”);
7. } 8. } 9. }
What is the result?
A. The program runs and prints nothing.
B. The program runs and prints “Equal.”
C. An error at line 5 causes compilation to fail.
D. The program runs but aborts with an exception.
答案:C
111. Given:
1. public class Foo {
2. private int val;
3. public foo(int v) (val = v;) }
4. public static void main (String [] args) {
5. Foo a = new Foo (10);
6. Foo b = new Foo (10);
7. Foo c = a;
8. int d = 10;
9. double e = 10.0;
10. }
11. }
Which three logical expressions evaluate to true? (Choose Three)
A.(a ==c)
B.(d ==e)
C.(b ==d)
D.(a ==b)
E.(b ==c)
F.(d ==10.0)
答案:ABF //= =比较的是地址,他们都指向地址为10的堆栈;
Given the following code, what test would you need to put in place of
the comment line?
//place test here to result in an output of the string Equal
public class EqTest{
public static void main(String argv[]){
EqTest e=new EqTest();
}
EqTest(){
String s="Java";
String s2="java";//小心大小写
//place test here {
System.out.println("Equal");
}else
{
System.out.println("Not equal");
}
}
}
1) if(s==s2)
2) if(s.equals(s2)
3) if(s.equalsIgnoreCase(s2))
4)if(s.noCaseMatch(s2))
答案:3)//小心大小写
-------------------------------------------------------------------------
一道IBM笔试题(考==与EQUALS的区别)
题目:
Integer i = new Integer(42)
Long l = new Long(42)
Double d = new Double(42.0)
下面哪些返回true
1: i==l
2: i==d
3: l==d
4:i.equals(l)
5:i.equals(d)
6:l.equals(d)
7:i.equals(42)
答案:7;
编码验证:
public class Equivalence {
public static void main(String[] args) {
Integer i = new Integer(42)
Long l = new Long(42)
Double d = new Double(42.0)
System.out.println(i==l);
System.out.println(i==d);
System.out.println(l==d);
System.out.println(i.equals(l) );
System.out.println(i.equals(d) );
System.out.println(l.equals(d) );
System.out.println(i.equals(42));
}
}
运行结果:
1-3:编译不通过;
4-6:false
7:true
原理解释:
呵呵,我从thinking in java电子版中摘了一段:
1. 检查对象是否相等
关系运算符==和!=也适用于所有对象,但它们的含义通常会使初涉Java领域的人找不到北。下面是一个例子:
//: Equivalence.java
public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
} ///:~
其中,表达式System.out.println(n1 == n2)可打印出内部的布尔比较结果。一般人都会认为输出结果肯定先是true,再是false,因为两个
Integer对象都是相同的。但尽管对象的内容相同,句柄却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false
,再是true。这自然会使第一次接触的人感到惊奇。
若想对比两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“
主类型”,那些类型直接使用==和!=即可。下面举例说明如何使用:
//: EqualsMethod.java
public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
} ///:~
正如我们预计的那样,此时得到的结果是true。但事情并未到此结束!假设您创建了自己的类,就象下面这样:
//: EqualsMethod2.java
class Value {
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
} ///:~
此时的结果又变回了false!这是由于equals()的默认行为是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希
望的行为。
发表评论
-
Java Stack Heap Static Method
2009-07-27 11:58 1938数据都存放在哪里? 1.寄存器。记得以前汇编里面有学习过,叫做 ... -
Java究竟是传值还是传引用?
2009-07-25 11:03 8991. 简单类型是按值传递 ... -
Extends & Implements
2009-07-07 21:57 975推崇接口继承(implements ... -
Thinking In Java 4th Edition
2009-07-07 16:16 834“上帝赋予人类说话的 ... -
Java Stack & Heap
2009-07-07 16:14 9071.栈(stack)与堆(heap)都是Java用来在Ram中 ... -
Java多线程设计模式详解之一
2009-07-07 16:09 1034线程的创建和启动 java语言已经内置了多线程支持,所有实现 ... -
Java Exception
2009-07-04 21:14 1177package myExample.testException ... -
Java GC
2009-07-04 21:10 2885一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的 ... -
OO设计原则总结
2009-07-04 21:08 558什么是设计原则? 设计原则是基本的工具,应用这些规则可以使你 ... -
Final方法节省时间开销
2009-07-04 21:05 8301、final类: 可以用“final”声明一个类不可再被作 ... -
Java MD5加密
2009-07-04 21:03 2063---------------MD5------------- ... -
Java Interface & Abstract Class
2009-07-04 20:59 4436当使用继承的时候,主要是为了不必重新开发,并且在不必了解实现细 ... -
使用java.util.zip实现文件压缩和解压
2009-07-04 20:59 1383[color=indigo][/color][size=med ... -
String Pool,String a=new String("abc");
2009-07-04 20:53 1862在jvm中存在着String Pool String pool ...
相关推荐
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,很多开发者容易混淆它们。理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java ...
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的运算符,它们之间的区别是非常重要的。 首先,我们需要了解 Java 中的内存模型。在 Java 中,变量可以分为两种:基本类型(primitive type)和...
【Java面试题】equals与==的区别
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个常用的操作符,经常用于比较对象或变量的值。然而,许多开发者不知道它们之间的区别,或者误用它们,导致程序出错。下面我们将详细解释 equals 和 == 的...
Java 中的equals和==的区别 Java 是一种面向对象的编程语言,其中有两种数据类型:基本数据类型和引用数据类型。基本数据类型包括整数类型、浮点数类型、字符类型、布尔类型等,共有八种;而引用数据类型则包括 ...
此外,`Objects.equals()`是Java 7引入的一个实用工具方法,可以更安全地比较对象,避免出现`NullPointerException`: ```java Objects.equals(str1, str2); ``` 了解这些基础知识,能帮助我们写出更加健壮和高效...
Java 中equals和==的区别
Java中equals和==的区别 Java是一门面向对象的编程语言,它提供了多种运算符和方法来比较对象和变量。在Java中,比较两个对象是否相等时,经常使用到的运算符有"=="和"equals"。虽然两者都可以用于比较,但它们有着...
java中equals和==的区别-5页.pdf
在Java编程语言中,`equals()`方法和`==`运算符是用于比较对象的两种不同方式,它们在处理不同类型的数据时有不同的行为。了解这两者的区别对于编写正确的代码至关重要。 `==`运算符: 1. `==`用于比较基本类型的...
在Java编程语言中,`equals()` 和 `==` 运算符在比较对象时有着显著的不同。理解这两者的区别对于编写高效、可靠的代码至关重要。以下是它们的详细解释: 1. **`==` 运算符**: `==` 在Java中主要用于比较基本类型...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别和用法对于任何Java开发者来说都至关重要,特别是对于那些正在积累Java开发经验的人来说。 首先,让我们...
### Java中的`==`与`equals`方法的区别详解 在Java编程中,比较对象的相等性是一个常见的需求,但很多初学者对于`==`运算符与`equals`方法的区别容易混淆。本文将深入探讨两者之间的差异,以及它们在不同场景下的...
在Java编程语言中,`equals()` 和 `==` 运算符经常被用来比较对象,但它们之间存在着显著的区别。理解这些差异对于编写正确、健壮的代码至关重要。以下是关于 `equals()` 和 `==` 在Java中的详细解释。 首先,`==` ...
在Java编程语言中,`equals()` 和 `==` 都用于比较对象,但它们的用法和含义有所不同。本文将详细解析这两个操作符在Java中的区别,并通过具体的例子进行阐述。 1. `==` 操作符: `==` 在Java中主要用来比较基本...