zoukankan      html  css  js  c++  java
  • 大数据之路day04_2--经典bug(equals与==比较不同,break的跳出不同)

    一、equals与==比较不同

    在实现某个人去5个商场去购物,控制台输入是否购物(Y/N)的时候,在比较出了问题,发现无论输入什么都是false,后来查阅资料发现,字符串的比较,==和equals不一样。

    先看下面的例子:

    1 String s1,s2,s3 = "abc", s4 ="abc" ;
    2 s1 = new String("abc");
    3 s2 = new String("abc");
    4 
    5 s1==s2   是 false      //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,
    6 
    7 s1.equals(s2) 是 true    //两个变量的所包含的内容是abc,故相等。

    我们发现,

    一、对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

     1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。

    (java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性)

     2、“equals()”比较字符串中所包含的内容是否相同。

    购物的例子:有幸的朋友可以看看我敲的代码,欢迎进行补充。

     1 package day04;
     2 
     3 import java.util.Scanner;
     4 
     5 public class Shop_bug {
     6     public static void main(String[] args) {
     7         //5家店,每家店限制购买3件衣服
     8         int[] shops = new int[5];
     9         int count = 0;
    10         Scanner sc = new Scanner(System.in);
    11         
    12         for(int i = 0;i<shops.length;i++) {
    13             System.out.println("欢迎进入"+(i+1)+"店进行购物!");
    14             for(int j = 0;j<3;j++) {
    15                 System.out.println("是否选择购买商品?(Y/N)");
    16                 String a = sc.next();
    17                 if(a.equals("Y") || a.equals("N") ) {
    18                     if(a.equals("Y")) {
    19                         count++;
    20                     }else{
    21                         break;
    22                     }     
    23                 }else {
    24                     System.err.println("上一个的输入方式有问题并且购买失败!");
    25                     j-=1;
    26                 }
    27                  
    28             }
    29             System.out.println("欢迎下次光临第"+(i+1)+"家店");
    30             System.out.println();
    31             
    32         }
    33         System.err.println("您总共购买了"+count+"件衣服!");
    34         
    35         
    36     }
    37 
    38 }

    二、break的跳出不同

    在敲代码的过程中,当我们遇到两个for循环,内部要判断的时候,有时候会在判断不符合的时候跳出循环,进行for循环外的代码,因为不知道break的作用范围,导致实现的效果不如题意。

    例子:

     在这里我特地将if()里面写的是一个真使其执行break,在第一个for循环内,第二个for循环外添加一条输出语句,结果我们发现,当执行了break语句,在嵌套for循环中,跳出的是本for循环。

  • 相关阅读:
    string
    luogu1419 寻找段落
    vijos2024 无向图最短路径
    [Tjoi2016&Heoi2016]排序
    Vijos1083 小白逛公园
    [ZJOI2007]矩阵游戏
    NOIP2015 信息传递
    [HAOI2006]受欢迎的牛
    luogu3834 【模板】可持久化线段树 1(主席树)
    luogu2625 豪华游轮
  • 原文地址:https://www.cnblogs.com/wyh-study/p/11815293.html
Copyright © 2011-2022 走看看