大数据之路day04_2--经典bug(equals与==比较不同,break的跳出不同)
2024-09-01 16:36:49
一、equals与==比较不同
在实现某个人去5个商场去购物,控制台输入是否购物(Y/N)的时候,在比较出了问题,发现无论输入什么都是false,后来查阅资料发现,字符串的比较,==和equals不一样。
先看下面的例子:
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc"); s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样, s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
我们发现,
一、对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。
(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性)
2、“equals()”比较字符串中所包含的内容是否相同。
购物的例子:有幸的朋友可以看看我敲的代码,欢迎进行补充。
package day04; import java.util.Scanner; public class Shop_bug {
public static void main(String[] args) {
//5家店,每家店限制购买3件衣服
int[] shops = new int[5];
int count = 0;
Scanner sc = new Scanner(System.in); for(int i = 0;i<shops.length;i++) {
System.out.println("欢迎进入"+(i+1)+"店进行购物!");
for(int j = 0;j<3;j++) {
System.out.println("是否选择购买商品?(Y/N)");
String a = sc.next();
if(a.equals("Y") || a.equals("N") ) {
if(a.equals("Y")) {
count++;
}else{
break;
}
}else {
System.err.println("上一个的输入方式有问题并且购买失败!");
j-=1;
} }
System.out.println("欢迎下次光临第"+(i+1)+"家店");
System.out.println(); }
System.err.println("您总共购买了"+count+"件衣服!"); } }
二、break的跳出不同
在敲代码的过程中,当我们遇到两个for循环,内部要判断的时候,有时候会在判断不符合的时候跳出循环,进行for循环外的代码,因为不知道break的作用范围,导致实现的效果不如题意。
例子:
在这里我特地将if()里面写的是一个真使其执行break,在第一个for循环内,第二个for循环外添加一条输出语句,结果我们发现,当执行了break语句,在嵌套for循环中,跳出的是本for循环。
最新文章
- 由XML解析学习工厂模式
- Hadoop日记Day12---MapReduce学习
- 04Mybatis_搭建Mybatis的开发环境
- ubuntu16.04+cuda7.5
- LANDR:在线母带处理
- 炫酷JQUERY自定义对话框插件JDIALOG_JDIALOG弹出对话框和确认对话框插件
- 开发设计模式(三)策略模式(Strategy Pattern)
- Jquery Ajax调用aspx页面实例
- HDOJ/HDU 1200 To and Fro(加密解密字符串)
- Python抓取淘宝IP地址数据
- 使用dom4j 读取XML文件
- javasscript学习笔记 之 数组学习二 数组的所有方法
- android解决内存溢出的问题(没有从根本上解决)
- Python 第十三篇之二:jQuery基础
- EmEditor Professional(文本编辑) 下载地址
- DSP_TMS32F2812的串口操作
- Android APP开发入门教程-Button
- 恶补web之一:html学习(2)
- 快速创建一个 spring mvc 示例
- KVM的VPS主机在Centos6.x下修改系统时间