Java中的等式

原创 2004年09月03日 20:10:00
比较原始类型的相等与比较两个对象相等是不同的。如果数值5存放在两个不同的int变量中,比较两个变量是否相等将产生结果为 boolean 值 true:

TestIntComparison 产生以下输出:



相等操作符由于原始类型时比较的是它们的值。而用于对象时比较的是对象的引用而不是对象的实际内容。 您可能问:"这些引用都指向同一个对象么?" 为了说明清晰,请看下面只含有 tag 和 age 的 Dog 的又一版本:



如果有两只狗(dog),即使它们的内容都相同,用 == 操作符时它们并不相等。下面代码段的输出表明在用 "==" 时 a 和 b 并不相等:



那么,应该怎么比较两个对象的值而不是比较它们的引用呢?Java(TM) 编程语言有一个约定,方法 equals() 用来定义对象值相等。 类 Object 中定义了方法equals(),如果在其子类中没有被重载,那么默认使用的就是它。 为了比较两只狗(dog) a 和 b 的值,你应该重写上面的比较部分:



上面的代码中,如果在 Dog 中没有重载 equals() 方法,两只狗依旧不等。因为 Object.equals() 实际模拟的是 == 操作符的功能。 Dog 中 equals() 的定义很好懂:



为什么 equals() 的参数类型是 Object 而不是 Dog 呢?因为你是在重载父类 Object 的方法 equals(),所以必须用相同的方法标记。但我们希望传进的参数是另一只Dog,所以为了能够访问参数的字段需将其类型转换为 Dog。

但是,由于 equals() 是在 Dog 中定义的,你必须检查传入的对象是否是一只 Dog,因为有人可能这样用:



字符串 "blort" 也是一个 Object ,因此与 Dog 中 equals() 的标记是匹配的。equals() 的正确写法是:



操作符 instanceof 询问 o 是否是 Dog (包括 Dog 的子类) 的实例。

字符串的比较引入了对象比较的最后一个问题,那就是

"abc"=="def"

表达式的值为 true 还是 false 呢?是false,因为他们是本质都不同的对象(显而易见,他们的内容都不同)。但是,下面的表达式

"abc"=="abc"

是 true 还是 false 呢?不幸的是,这由编译器决定。如果编译器将对 "abc" 的两个引用优化为一个对象而不是两个对象,那么表达式的值为 true。但是,如果编译器不做这种优化,表达式的值则应为 false!

如果你真的想判断两个字符串在物理上是不是同一个对象,请用 equals() 方法:

等式

等式 时间限制:1000 ms  |  内存限制:10000 KB 难度:5 描述 有以下等式:a1*x13+a2*x23+a3*x33+a4*x43+a5*x53=0 x1,x2,x3...
  • wximo
  • wximo
  • 2015-04-22 15:00:17
  • 369

1983 等式问题

题目描述 Description 有一个未完成的等式:1 2 3 4 5 6 7 8 9=N 空格(1前面没有空格)内可以填入+,-,也可以不填。 编程找出输入某个整数 N 后使等式成立的所有方...
  • qq_36238595
  • qq_36238595
  • 2017-04-02 22:41:07
  • 358

等式变换java解法

输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-...
  • Yan456jie
  • Yan456jie
  • 2015-01-22 16:27:32
  • 699

【Java】计蒜客 蓝桥杯模拟赛5 补全等式

这题想到了全排列,当然最后也做出来了,但是会超时。怎么说~等个5分钟。 int a[]; int book[]; public static void main(String[] args){ ...
  • qq_35131940
  • qq_35131940
  • 2017-04-02 10:29:08
  • 362

请编程计算出所有的水仙花数。

#include #include int main() { int i,a,b,c; for(i=100;i
  • tx17_38381517116
  • tx17_38381517116
  • 2017-11-11 13:33:27
  • 428

Codevs 1983 等式问题

1983 等式问题 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 有一个未完成的等式...
  • WhiStLenA
  • WhiStLenA
  • 2016-06-10 14:39:40
  • 640

将1~9放入9个[]中,使得[][][]+[][][]=[][][]等式成立(dfs)

#include <algorithm> #include <iostream> #include <cstring&gt...
  • qq_40679299
  • qq_40679299
  • 2018-02-21 21:19:09
  • 50

计蒜客模拟赛5-补全等式;dfs全排列+剪枝

下图中,每个方块代表 1…13 中的某一个数字,但不重复。 例如: 1×2+9×7=13×5 10×8+12×3=11×4---这里发现+,-都不影响答案; 只要有任意一个方块代表的数字不...
  • obession
  • obession
  • 2017-04-02 11:17:33
  • 300

从计算的本质到编程语言

从计算的本质到编程语言,所谓计算,是构建在一套公理体系上的,并且在此基础上不断向上演化。 两大类型:数值计算-数值计算包括实数和函数的加减乘除、幂运算、开方运算、方程的求解等;符号推导-符号推导包括代...
  • thisinnocence
  • thisinnocence
  • 2014-04-30 16:11:52
  • 3689

2017.8.15总结4-数学题

Description  当Alice在浏览数学书时,看到一个等式A=S,奇怪的是A和S并不相等。Alice发现可以通过在A中添加加号“+”从而使得等式成立。   编程计算最少需要插入多少加号使得等...
  • qq_35866651
  • qq_35866651
  • 2017-08-15 22:06:28
  • 124
收藏助手
不良信息举报
您举报文章:Java中的等式
举报原因:
原因补充:

(最多只允许输入30个字)