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 圈,然后变蓝色暂停不再跑。(这样的话,不要以为程序出问题了~~~)

有一个小技巧就是,如果是递归调用的函数,可以添加一个静态变量记录该函数调用的次数,并每次输出它,不仅可以看到该函数被调用次数,也可以知道程序在运行~~意思就是通过打印变量去检测程序运行到哪了,特别是在递归的时候~

时间: 2024-10-15 01:43:20

Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检测程序运行和函数调用次数计数的相关文章

Java中的int和Integer

代码: 1 public class Test{ 2 3 public static void main(String[] args){ 4 Integer i01 = 59; 5 int i02 = 59; 6 Integer i03 = Integer.valueOf(59); 7 Integer i04 = new Integer(59); 8 System.out.println(i01==i02); 9 System.out.println(i01==i03); 10 System.o

java中String,int,Integer,char、double类型转换

转自 http://blog.csdn.net/zhang103886108/article/details/42917693 1.如何将字串 String 转换成整数 int? int i = Integer.valueOf(my_str).intValue(); int i=Integer.parseInt(str); 2.如何将字串 String 转换成Integer ?Integer integer=Integer.valueOf(str); 3.如何将整数 int 转换成字串 Stri

java中byte, int的转换

最近在做些与编解码相关的事情,又遇到了byte和int的转换,看着那些关于反码.补码的说明依旧头疼,还是记下些实用的方法吧.int -> byte可以直接使用强制类型转换: byte b = (byte) aInt;这个操作是直接截取int中最低一个字节,如果int大于255,则值就会变得面目全非了.对于通过InputStream.read()获取的int,可采用这个方法将值还原. byte -> int这里有两种情况,一种是要求保持值不变,例如进行数值计算,可采用强制类型转换:int i =

【转】java中byte, int的转换

原文网址:http://freewind886.blog.163.com/blog/static/661924642011810236100/ 最近在做些与编解码相关的事情,又遇到了byte和int的转换,看着那些关于反码.补码的说明依旧头疼,还是记下些实用的方法吧.int -> byte可以直接使用强制类型转换: byte b = (byte) aInt;这个操作是直接截取int中最低一个字节,如果int大于255,则值就会变得面目全非了.对于通过InputStream.read()获取的in

java中Class.getResource用法(用于配置文件的读取)

用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且从现实应用来讲,最终生成的应用也会部署到Windows外的操作系统中,对于linux来说,在应用中用了c:/这样的字样,就是失败,所以

049、Java中使用switch判断,不加入break时的操作

01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String[] args) { int ch = 1; switch (ch) { // 判断的是数字 case 2: { // 判断内容是否是2 System.out.println("内容是2"); } case 1: { // 判断内容是否是1

java中DatagramSocket连续发送多个数据报包时产生丢包现象解决方案

1 try { 2 //向指定的ip和端口发送数据~! 3 //先说明一下数据是谁发送过来的! 4 byte[] ip = InetAddress.getLocalHost().getHostAddress().getBytes(); 5 dp = new DatagramPacket(ip, ip.length, sendIAD, QQReceive.getPort()); 6 ds.send(dp); 7 8 //这里主要是因为多可数据报包发送时会产生丢包的情况...所以暂停一段时间! 9

java项目用jdk检测程序运行情况

这次暂时用到的是查看运行着的java项目的线程运行情况,如发现其他用法,欢迎提点.

Java中Integer和ThreadLocal

一. Integer 1.引子 在开始之前,我还是需要吐槽下自己,我是真的很菜! 他问:**两个Integer对象==比较是否相等? 我答:对象==比较,是引用比较,不相等! 他问:IntegerCache这个用来干什么? 我答:......,我不是很清楚!!! 从这里可以看出,我是真的很水!! 基于这些原因还有其他的等等,我开始写博文,开始写踩过的坑! 2.IntegerCache 在介绍这个缓存之前,先来认知下Integer.java中,int是基本的数值类型,表示整型:Integer是其对