• Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检測程序执行和函数调用次数计数


    总结一下近期做的东西中遇到的问题

    1. Java 中的 int 与 Integer 用于 List<Integer>  时

       两者之间的关系都是非常清楚的。int 是基本数据类型,存储的是值,而 Integer 是引用数据类型,存储的是指向数值的地址。

    Integer 是在类层面上对 int 的封装。然后 Java 提供了自己主动装包拆包机制,使得两者之间能够转换。这里主要是測试了下它们用于 List 时候的疑惑。

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package readdxflunwenyh;
    
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     *
     * @author User
     */
    public class test_Integer {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            List<Integer> lst=new LinkedList();
            lst.add(new Integer(1));
            lst.add(3);
            lst.add(5);
            lst.add(7);
            lst.add(9);
            //test1
            for(int i=0;i<10;++i){
              if(lst.contains(i)==false) lst.add(i);
              else System.out.println("true:"+i);//结果显示,直接用int型的i值来推断包括关系,能够正确推断
            }
            for(int i=0;i<lst.size();++i){//输出
              System.out.print(lst.get(i)+" ");
            }
            System.out.println();
            //test2
            lst.remove(1);//结果显示,删除了索引1号位的元素
            for(int i=0;i<lst.size();++i){//输出
              System.out.print(lst.get(i)+" ");
            }
            System.out.println();
            //test3
            lst.remove(new Integer(1));//结果显示,删除了值为1的元素
            for(int i=0;i<lst.size();++i){//输出
              System.out.print(lst.get(i)+" ");
            }
            System.out.println();
        }
    }
    

    结果:

    true:1
    true:3
    true:5
    true:7
    true:9
    1 3 5 7 9 0 2 4 6 8 
    1 5 7 9 0 2 4 6 8 
    5 7 9 0 2 4 6 8 
    5 7 9 0 4 6 8 

    通过測试发现,在 List<Integer> lst 推断包括关系 contains 时。能够用 int 型的变量正确推断是否包括了;而在删除 remove 时。用 int 型变量的话。删除的是对应索引的元素。而不是那个值的元素。究其原因。推測应该是 contains 方法没有被重载。它仅仅有一种參数,就是 Object 类型,这时用 int 型变量做实參。就自己主动转换为 Integer 类型。而 remove 方法被重载了,不仅有 int 型形參,还有 Object 型形參。这种话,当用 int 型变量做实參时,匹配的就直接是那个删对应索引的元素,即 int 型形參。不会转换为 Integer 变量。

    这样想来,也是显然的了。

    有 remove 的那个困惑,可能主要由于你在 add 的时候是能够直接用 int 型变量的,(并且经常都是用 int 型变量),处于对等的想法,就会以为在 remove 的时候用 int 型变量就能够删除值为它的元素。

    只是另一点疑惑的是。List<Integer> 中存的是引用。程序中之前存的 1 或 2  的引用。和后来要删除时自己暂时 new 的新的 1 或 2 的引用。就算 1 的由于都是常量,但 2 第一次增加的时候是由 int 型变量转换而来,之后删除时 2 是暂时 new 出来的 Integer 变量,这种两个引用是一样的吗?

    2. Netbeans 程序框和程序计数

    之前一个程序跑了好久,然后过程中没有输出,看着 Netbeans 就是一直不动,以为程序哪里出问题卡死了呢。Netbeans 右下角有一个进度条,它在程序有输出时会连续跑 4 圈,然后变蓝色暂停不再跑。(这种话。不要以为程序出问题了~~~)

    有一个小技巧就是,假设是递归调用的函数,能够加入一个静态变量记录该函数调用的次数。并每次输出它,不仅能够看到该函数被调用次数,也能够知道程序在执行~~意思就是通过打印变量去检測程序执行到哪了,特别是在递归的时候~

  • 相关阅读:
    解决“google快照无法打开”的简单而有效的方法~
    在Struts2里面嵌入Spring
    HDU
    设计模式大总结(二)
    Node.js入门笔记
    草图检索和识别[开源]
    2019-10-31-VisualStudio-断点调试详解
    2019-10-31-VisualStudio-断点调试详解
    2019-9-2-C#-设计模式-责任链
    2019-9-2-C#-设计模式-责任链
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5080630.html
Copyright © 2020-2023  润新知