您的位置:首页 > 编程语言 > Java开发

Java中,equals()方法与"=="区别小实例

2017-03-11 23:19 447 查看
题目:要求是从控制台输入2个数据,再输入一操作符(只能进行加、减、乘、除运算),之后对这两个数据进行“+、-、*、/”判断运算。

对于本篇博客,由于我主要为了突出equals()方法和“==”的区别,在下列的代码一、代码二片段中,我没有对其进行添加异常处理机制。

对于大多数初学者,对于博客中的题目,一般会写出如代码一所示的代码。但是,代码一中的代码不能运行。原因是因为,代码一种存在着一个错误。这个错误即非编译错误,也不是运行时错误,导致很多初学者面对这个错误时,无从下手,不知道怎么去修改代码,以得到正确的运行结果。

对于博客中的题目,其正确的代码入代码二所示。在这里,让我们先来看看代码一、代码二所示的代码,之后再来对这两个代码片段的区别之处以及其中所运用到的一些原理进行剖析。

代码一

package SimpleFactoryPattern.Test_02;

import java.io.InputStream;
import java.util.Scanner;

public class Program {
private static Scanner scan;
private static String result = null;

public static void main(String[] args) {

System.out.println("请输入A的值:");
scan = new Scanner(System.in);
String strNumberA = scan.nextLine();

System.out.println("请选择运算符合(+、-、*、/)");
scan = new Scanner(System.in);
String strOperator = scan.nextLine();

System.out.println("请输入B的值:");
scan = new Scanner(System.in);
String strNumberB = scan.nextLine();

if (strOperator == "+") result = String.valueOf(Double.parseDouble(strNumberA) + Double.parseDouble(strNumberB));
if (strOperator == "-") result = String.valueOf(Double.parseDouble(strNumberA) - Double.parseDouble(strNumberB));
if (strOperator == "*") result = String.valueOf(Double.parseDouble(strNumberA) * Double.parseDouble(strNumberB));
if (strOperator == "/") result = String.valueOf(Double.parseDouble(strNumberA) / Double.parseDouble(strNumberB));

System.out.println("结果是:" + result);

}  //public static void main(String[] args) {

}


运行结果为:

请输入A的值:
10
请选择运算符合(+、-、*、/)
+
请输入B的值:
3
结果是:null


代码二

package SimpleFactoryPattern.Test_02;

import java.io.InputStream;
import java.util.Scanner;

public class Program {
private static Scanner scan;
private static String result = null;

public static void main(String[] args) {

System.out.println("请输入A的值:");
scan = new Scanner(System.in);
String strNumberA = scan.nextLine();

System.out.println("请选择运算符合(+、-、*、/)");
scan = new Scanner(System.in);
String strOperator = scan.nextLine();

System.out.println("请输入B的值:");
scan = new Scanner(System.in);
String strNumberB = scan.nextLine();

//易犯错误:if(strOperator == "+")
if (strOperator.equals("+")) result = String.valueOf(Double.parseDouble(strNumberA) + Double.parseDouble(strNumberB));
if ("-".equals(strOperator)) result = String.valueOf(Double.parseDouble(strNumberA) - Double.parseDouble(strNumberB));
if (strOperator.equals("*")) result = String.valueOf(Double.parseDouble(strNumberA) * Double.parseDouble(strNumberB));
if ("/".equals(strOperator)) result = String.valueOf(Double.parseDouble(strNumberA) / Double.parseDouble(strNumberB));

System.out.println("结果是:" + result);

}  //public static void main(String[] args) {

}


运行结果为:

请输入A的值:
10
请选择运算符合(+、-、*、/)
+
请输入B的值:
5
结果是:15.0


通过对代码一、代码二,我们可以看出。之所以代码一、代码二其运行结果不同,主要是因为在if()括号内,String类型的变量调用的方法不同。代码一中,String类型的变量直接以“==”去判断两个String类型的变量是否“相同”。代码二中,String类型的变量以equals()方法去判断两个String类型的变量是否相等。

对于“==”,其比较的是:关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系。其中,由于String类型是引用类型变量,String类型变量存储的是它指向的对象在内存中的存储地址,并不是“值”本身。所以,在代码一种的if()语句中,通过控制台输入的操作符与已经设定的操作符比较,其结果均为false,导致,最后的结果为null.

对于equals()方法,由于其是基类Object中的方法。引用类型和非引用类型,其都对Object基类中的equals()方法进行了重写。导致在这里,我要将equals()方法有些费力。至于equals()方法的具体原理,请参见博客:浅谈Java中的equals和==

备注:由于本人现阶段对于Java的知识掌握有限,博客中难免会有出错的地方。如有错误,请指出,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: