一道力扣题引发的知识的疏漏弥补

题目一 原题:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

 

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题需要我写一个类,类中要使用栈。

第一个问题

是我在构造函数中写了返回值void导致报错,当时没发现,我在类中声明静态的类变量的时候就初始化了栈stack,而不是在构造方法中初始化,所以避免了这个报错。

第二个问题

在静态变量声明的时候就初始化new了stack和在构造方法中才new有什么区别?区别应该只是一个在类被定义的时候就已经初始化stack了,而另一个是在创建类的实例的时候才初始化了stack。

附:

/*

  • Java类的主动使用(六种)
  • 1.创建类的实例(如 new Test())
  • 2.访问某个类或接口的静态变量,或者对该静态变量赋值(如 int b = Test.a 或者 Test.a = b)
  • 3.调用类的静态方法(如 Test.doSomething())
  • 4.反射(如Class.forName(“”))
  • 5.初始化一个类的子类(如class Parent{},class Child extends Parent{},new Child())
  • 6.Java虚拟机启动时被标明为启动类的类(如命令行执行"java Test",Test即为启动类)
  • 除此之外的所有使用都叫做“被动使用”
  • 所有Java虚拟机实例必须在每个类或者接口被java程序“首次主动使用”时才初始化它们。

————————————————
版权声明:本文为CSDN博主「haoshenwang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanghao109/article/details/49591815

题目二 java中null字符串与字符串长度为0的区别

null字符串不占用内存空间,长度为0的字符串“”是占用内存空间的。
String str = null;中的str不指向任何内存地址;
String str = “”;中的str指向""所在的内存地址。

补充:

编程题中经常遇到,对于数组首先判断:

private static void test(int[] a) {
        if (a == null || a.length==0) {
            return;
        }
    }
 

常见的形式有三种:

语句1:int[] a; //只是声明了一个数组变量,并未初始化,无法使用。
语句2:int[] a = null;//声明了一个数组变量,赋值为 null;
语句3:int[] a = new int[0];//声明并创建一个数组对象,长度为0

上面的三个语句,系统占用的内存依次增多。

语句1,并未初始化,使用会出错:

语句2,虽然初始化,但是一个空指针,没有指向一个有效的数组什么都做不了,无法调用这个对象的方法,会产生空指针异常:

语句3,长度是0,是一个数组对象,只不过没有内容:

所以对于数组,不但要判断它是否为空指针,也需要判断它是否有内容,同时要先判断空指针再判断长度是否为0,顺序不能颠倒,因为空指针没有length属性
————————————————
版权声明:本文为CSDN博主「南淮北安」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nanhuaibeian/article/details/109899694

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值