java equals用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java equals用法相关的知识,希望对你有一定的参考价值。

public class Test
public static void main(String[] args)
String s1 = "abc";
String s2 = "abc";
String s3 = s1.substring(0);
System.out.println(s2==s3+","+s2.equals(s3));



输出 false 怎么回事

字符串常量共享,而+或substring等操作产生的结果并不是共享的。
可以看出s1==s2 true
String s3 = s1.substring(0); 你的参数是0,情况很特殊,我看了一下源码,它返回的是this,

所有s3==s1==s2;
s2.equals(s3) 比较内容,没争议,true。

你现在的问题是算符的优先级问题。追问

s2.equals(s3) true的结果没有输出啊

追答

System.out.println( (s2==s3) +","+s2.equals(s3)); 你没加括号,优先级问题。

参考技术A 去看看equals的值比较,和引用比较吧。
s2是一个值,s3是s1的引用,equals比较的是值和值直接的比较,你这个当然返回false了
参考技术B “==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
参考技术C s1.substring(0);将新的对象赋予s3,
s2==s3;比较的是两个对象是否相等,false

s2.equals(s3)比较两个值是否相等,true
参考技术D System.out.println((s2==s3)+","+s2.equals(s3));
--------- 这才是你想要的结果

[equals和hasNext的java用法

为什么此代码不停止? “ scanner.equals(null)”和“ scanner.hasNext()== false”不是同一角色还是至少是同一角色?

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = 1;
        while(true) {
            if(scanner.equals(null))
                break;
            else {
                String line = scanner.nextLine();
                System.out.println(i + " " + line);
                i++;
            }
        }
    }
}
答案

scanner.equals(null)将始终返回false。它检查对象实例是否为空,否则为空。相比之下,scanner.next()检查扫描程序是否可以找到令牌。

无论如何,您正在使用nextLine方法,因此您应该使用hasNextLine,而不是hasNext

    while(scanner.hasNextLine()) {
        String line = scanner.nextLine();
        System.out.println(i + " " + line);
        i++;
    }

以上是关于java equals用法的主要内容,如果未能解决你的问题,请参考以下文章

求教args用法,equals用法,具体如下:

java中equals与==的用法比较

JAVA中的equals()

java中equals以及==的用法(简单介绍)

equals方法

关于java中equals方法的疑惑