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 圈,然后变蓝色暂停不再跑。(这种话。不要以为程序出问题了~~~)
有一个小技巧就是,假设是递归调用的函数,能够加入一个静态变量记录该函数调用的次数。并每次输出它,不仅能够看到该函数被调用次数,也能够知道程序在执行~~意思就是通过打印变量去检測程序执行到哪了,特别是在递归的时候~
Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检測程序执行和函数调用次数计数的更多相关文章
- java中String,int,Integer,char、double类型转换
java中String,int,Integer,char.double类型转换----https://www.cnblogs.com/kangyu222/p/5866025.html
- java中的int与byte的转化
java中的int与byte的转化 1.基础准备 1.1.原码 就是二进制码,最高位为符号位,0表示正数,1表示负数,剩余部分表示真值 1.2.反码 在原码的基础上,正数反码就是他本身,负数除符号位之 ...
- Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- Java中的int和Integer
代码: public class Test{ public static void main(String[] args){ Integer i01 = 59; int i02 = 59; Integ ...
- java中byte, int的转换
最近在做些与编解码相关的事情,又遇到了byte和int的转换,看着那些关于反码.补码的说明依旧头疼,还是记下些实用的方法吧.int -> byte可以直接使用强制类型转换: byte b = ( ...
- 【转】java中byte, int的转换, byte String转换
原文网址:http://freewind886.blog.163.com/blog/static/661924642011810236100/ 最近在做些与编解码相关的事情,又遇到了byte和int的 ...
- java中Class.getResource用法(用于配置文件的读取)
https://www.cnblogs.com/keyi/p/6282838.html ******************************************** 用JAVA获取文件,听 ...
- Java 中的 int 型转为 long 型
先将 int 型转为 String 型,然后再将 String 转为 long 型,如下图: public class TestIntToLong { public static void main( ...
- 007、Java中定义int型变量
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
随机推荐
- USACO 5.1 Musical Themes(哈希+二分)
Musical ThemesBrian Dean A musical melody is represented as a sequence of N (1 <= N <= 5000) n ...
- 关于 eclipse启动卡死的问题 解决方法
关于 eclipse启动卡死的问题(eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法),自己常用的解决方法: 方案一(推荐使用,如果没有这个文件,就使用方案二): 到<works ...
- ECSHOP的JS文件代入问题
参考一下默认的js写法就行了<script type='text/javascript' src='themes/ecmoban/js/jquery-1.7.2.min.js'></ ...
- Python并发编程-IO模型-IO多路复用实现SocketServer
Server.py import select import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.setblockin ...
- 使用Generator(小黑鸟)反向生成Java项目(IDEA + Maven)
一.生成Maven项目 二.配置pom.xml文件 通用代码 <properties> <!-- 设置项目编码编码 --> <project.build.sourceEn ...
- spring websocket集群问题的简单记录
目录 前言 解决方案 代码示例 前言 最近公司里遇到一个问题,在集群中一些websocket的消息丢失了. 产生问题的原理很简单,发送消息的服务和接收者连接的服务不是同一个服务. 解决方案 用中间件( ...
- C# 非模式窗体show()和模式窗体showdialog()的区别
对话框不是模式就是无模式的.模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载).例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击"确定"或 ...
- .NET Core改造工程直播
[背景] 新项目需要跨平台,原来积累的.NET类库需要改造为.NET Core. [直播] 新增加的项目不支持排除文件 不支持定义条件编译常量,虽然在项目中能使用#if语法,但无地方定义DefineC ...
- [ 原创 ] Java基础2--构造方法的继承和重载
1.构造方法的重载是指同一个类中定义不同参数的多个构造方法,已完成不同情况下对象的初始化. 例如: Point(); Point(x); Point(x,y); 2.一个类的若干个构造方法之间可以相互 ...
- 工作中怎么解决bug
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 1,看日志 2,看日志解决不了,断点调试 3,网络搜索.