zoukankan      html  css  js  c++  java
  • Java中利用Scanner键入的字符串与其他字符串的比较

    利用Scanner获取到键入的字符串与其他字符串作比较时,如果直接用关系运算符 == 比较,得到的结果总是false,因为实际比较的是两个变量引用的内存地址;

    而要比较其内容是否相等,可以使用Object的equals方法。

    例子:

    Scanner sc = new Scanner(System.in);
    String str1 = sc.next(); //从键盘中键入 你好
    String str2 = "你好";
    System.out.println(str1 == str2); //false
    System.out.println(str1.equals(str2)); //true

    下面的例子中两个字符串变量引用的是同一个字符串常量(“你好”),即“指向”了同一块内存地址,所以当用 == 比较这两个变量时得到的结果是true。

    String str1 = "你好";
    String str2 = "你好";
    System.out.println(str1 == str2); //true
    System.out.println(str1.equals(str2)); //true

    上面两个例子看起来似乎都是 两个字符串变量(str1,str2)引用了同一个字符串常量(“你好”)。

    但实际上,只有第二个例子中的 两个变量 引用了存放在data segement中的同一个字符串常量,即这两个变量“指向”同一块存放“你好”字符串常量的地址;

    第一个例子中,通过键入产生的字符串 相当于 String str1 = new String("你好"); new出来的一个新对象,不论之前是否有内容相同的对象,都会再new一个新的对象;

    str1所引用到的与直接定义的字符串变量str2所引用的对象不同,故用==比较为false。

  • 相关阅读:
    Redis 设计与实现 2:Redis 对象 redisObject
    Redis 设计与实现 1:数据库 redisDb
    KafkaProducer 简析
    G1 收集器
    KafkaMirrorMaker 的不足以及一些改进
    Redis 数据结构与对象编码 (Object Encoding)
    跨境 TCP 传输优化实录 — 使用 BBR 解决 LFN 问题
    TCP 协议简析
    使用模拟退火算法优化 Hash 函数
    LSM-Tree 与 B-Tree
  • 原文地址:https://www.cnblogs.com/holab/p/8586872.html
Copyright © 2011-2022 走看看