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

本题是实现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 minstack = new Stack(); Stack stack = new Stack(); 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(); } }
大家讲道理
大家讲道理

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

全部回覆 (3)
洪涛

既然你要用stack來實現,還要用==來判斷,那就應該push的時候做控制,讓兩個stack加入的物件是同一個。

public class MinStack { Stack minstack = new Stack(); Stack stack = new Stack(); 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(); } }
    大家讲道理

    ==是比引用,equals比的是值。

      PHPzhong

      ==是比較兩個字串引用的位址是否相同,即是否指向同一個對象,而equals方法則比較字串的內容是否相同。
      例如

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

      a == b回傳true,a.equals(b)同樣回傳true。
      因為程式在運行時有一個字串池,創建字串時會先查找池中是否有對應的字串,如果已經存在的話只需把引用指向它即可,如果沒有則新建一個。
      上例中建立a時,會在字串池中先建立一個"abc",然後a指向它;建立b時,由於"abc"已經存在,b直接指向它即可。
      若改為:

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

      則a == b回傳false,a.equals(b)回傳true。因為創建b時不管"abc"是否存在都會new一個新的"abc",從而a和b指向的字符創對像是不同的,因此返回false。

        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!