java - .equals()方法和==相等判断有什么区别?Leetcode 155中的问题
大家讲道理
大家讲道理 2017-04-18 10:25:18
0
3
696

本题是实现stack相关内容。
最早的时候写的代码如下,加粗部分的判断用==连接,

if(minstack.peek()==(stack.peek())

但是结果不正确,报告如下

Input:
["MinStack","push","push","push","push","pop","getMin","pop","getMin","pop","getMin"]
[[],[512],[-1024],[-1024],[512],[],[],[],[],[],[]]
Output:
["constructor","null","null","null","null","null","-1024","null","-1024","null","-1024"]
Expected:
["constructor","null","null","null","null","null","-1024","null","-1024","null","512"]

之后将加粗部分改为:

if(minstack.peek().equals(stack.peek()))

使用equals()连接,答案就是正确的了。

新人入码坑,求老师们指点一二这是为何?

另:这个结果报告是怎么看的,有点看不懂,是和二叉树有关的写法?求各位前辈指教!

谢谢!

附源码如下:

public class MinStack {
    Stack<Integer> minstack = new Stack<Integer>();
    Stack<Integer> stack = new Stack<Integer>();
   
    public MinStack() {     
    }
    
    public void push(int x) {
        if(minstack.empty() || x <= minstack.peek())
            minstack.push(x);
        stack.push(x);
    }
    public void pop() {
        **if(minstack.peek()==(stack.peek()))**
            minstack.pop();
        stack.pop();
    }
    public int top() {
        return stack.peek();   
    }
    public int getMin(){
        return minstack.peek();  
    }
}
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(3)
洪涛

Memandangkan anda ingin menggunakan tindanan untuk melaksanakannya dan menggunakan == untuk menilai, anda harus mengawalnya apabila menolak supaya objek yang ditambahkan pada dua tindanan adalah sama.

public class MinStack {
    Stack<Integer> minstack = new Stack<Integer>();
    Stack<Integer> stack = new Stack<Integer>();
   
    public MinStack() {     
    }
    
    public void push(int x) {
        Integer val = new Integer(x);
        if(minstack.empty() || val <= minstack.peek())
            minstack.push(val);
        stack.push(val);
    }
    public void pop() {
        if(minstack.peek()==(stack.peek()))
            minstack.pop();
        stack.pop();
    }
    public int top() {
        return stack.peek();   
    }
    public int getMin(){
        return minstack.peek();  
    }
}
大家讲道理

== membandingkan rujukan, dan sama membandingkan nilai.

PHPzhong

== membandingkan sama ada alamat yang dirujuk oleh dua rentetan adalah sama, iaitu sama ada ia menghala ke objek yang sama, manakala kaedah equals membandingkan sama ada kandungan rentetan adalah sama.
Contohnya

String a = "abc";
String b = "abc";

a == b mengembalikan benar, a.equals(b) juga mengembalikan benar.
Oleh kerana atur cara mempunyai kumpulan rentetan semasa ia berjalan, apabila mencipta rentetan, ia akan menyemak dahulu sama ada terdapat rentetan yang sepadan dalam kolam Jika ia sudah wujud, arahkan sahaja rujukan kepadanya yang baru.
Dalam contoh di atas, apabila a dibuat, "abc" akan dibuat terlebih dahulu dalam kumpulan rentetan, dan kemudian a menunjuk kepadanya apabila b dibuat, kerana "abc" sudah wujud, b boleh menunjuk terus ke ia.
Jika ditukar kepada:

String a = "abc";
String b = new String("abc");

Kemudian a == b mengembalikan palsu, dan a.equals(b) mengembalikan benar. Kerana apabila b dicipta, "abc" baharu akan dibuat tanpa mengira sama ada "abc" wujud, jadi objek penciptaan aksara yang ditunjuk oleh a dan b adalah berbeza, jadi palsu dikembalikan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan