Java中,equals()方法与"=="区别小实例
2017-03-11 23:19
447 查看
题目:要求是从控制台输入2个数据,再输入一操作符(只能进行加、减、乘、除运算),之后对这两个数据进行“+、-、*、/”判断运算。
对于本篇博客,由于我主要为了突出equals()方法和“==”的区别,在下列的代码一、代码二片段中,我没有对其进行添加异常处理机制。
对于大多数初学者,对于博客中的题目,一般会写出如代码一所示的代码。但是,代码一中的代码不能运行。原因是因为,代码一种存在着一个错误。这个错误即非编译错误,也不是运行时错误,导致很多初学者面对这个错误时,无从下手,不知道怎么去修改代码,以得到正确的运行结果。
对于博客中的题目,其正确的代码入代码二所示。在这里,让我们先来看看代码一、代码二所示的代码,之后再来对这两个代码片段的区别之处以及其中所运用到的一些原理进行剖析。
代码一
运行结果为:
代码二
运行结果为:
通过对代码一、代码二,我们可以看出。之所以代码一、代码二其运行结果不同,主要是因为在if()括号内,String类型的变量调用的方法不同。代码一中,String类型的变量直接以“==”去判断两个String类型的变量是否“相同”。代码二中,String类型的变量以equals()方法去判断两个String类型的变量是否相等。
对于“==”,其比较的是:关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系。其中,由于String类型是引用类型变量,String类型变量存储的是它指向的对象在内存中的存储地址,并不是“值”本身。所以,在代码一种的if()语句中,通过控制台输入的操作符与已经设定的操作符比较,其结果均为false,导致,最后的结果为null.
对于equals()方法,由于其是基类Object中的方法。引用类型和非引用类型,其都对Object基类中的equals()方法进行了重写。导致在这里,我要将equals()方法有些费力。至于equals()方法的具体原理,请参见博客:浅谈Java中的equals和==
备注:由于本人现阶段对于Java的知识掌握有限,博客中难免会有出错的地方。如有错误,请指出,谢谢。
对于本篇博客,由于我主要为了突出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的知识掌握有限,博客中难免会有出错的地方。如有错误,请指出,谢谢。
相关文章推荐
- 【Java学习】java中"=="和equals方法究竟的区别
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- 细说java面试“=="和"equals"方法的区别以及常量池的概念及使用
- Java基础——"=="和equals方法究竟有什么区别?
- Java中"=="与equals()方法的区别
- java基础 3、"=="和equals方法有什么区别
- Java基础之"=="和 和 equals 方法的区别
- Java中"=="和equals方法的区别
- 【Java面试题】3 Java的"=="和equals方法究竟有什么区别?简单解释,很清楚
- Java SE String的equals方法与"=="的区别浅析
- Java中"=="与equals()方法的区别
- Java基础回顾: "=="和equals()方法的区别
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
- "=="和equals方法究竟有什么区别? —— Java经典面试题系列
- java基础问题----"=="和equals方法究竟有什么区别
- java 中"=="与equals()方法的区别
- 【JAVA基础小问题】"=="和equals方法有什么区别?
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- 【高薪就业必备06】 java中"=="和equals方法究竟有什么区别?
- java中"=="和equals方法究竟有什么区别?