`
my_java_life
  • 浏览: 145793 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于java中的类型比较面试题,求解?

 
阅读更多

1.

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Integer i1 = 128;
		Integer i2 = 128;
		int i3 = 128;
		int i4 = 128;
		
		System.err.println(i1 == i2);//(1)
		System.err.println(i1 == i3);//(2)
		System.err.println(i2 == i3);//(3)
		System.err.println(i3 == i4);//(4)
	}

}

 结果:

 

false
true
true
true

 

2.那位对java比较基础比较扎实的大侠出来说说?对于第(2)、(3)行这种的结果比较迷惑?

 

 

 

 

 

 

3
1
分享到:
评论
9 楼 ps329795485 2012-03-03  
以前面试也有遇到这问题
8 楼 canghailan 2012-03-02  
你把Auto Boxing去掉就看清楚了:
public class Test {
    public static void main(String[] args) {
        Integer i1 = Integer.valueOf(128);
        Integer i2 = Integer.valueOf(128);
        int i3 = 128;
        int i4 = 128;

        System.err.println(i1 == i2);//(1)
        System.err.println(i1.intValue() == i3);//(2)
        System.err.println(i2.intValue() == i3);//(3)
        System.err.println(i3 == i4);//(4)
    }
}

至于缓存(JDK的实现):
public static Integer valueOf(int i) {
	assert IntegerCache.high >= 127;
	if (i >= IntegerCache.low && i <= IntegerCache.high)
		return IntegerCache.cache[i + (-IntegerCache.low)];
	return new Integer(i);
}
...
private static class IntegerCache {
	static final int low = -128;
	static final int high;
	static final Integer cache[];

	static {
		// high value may be configured by property
		int h = 127;
		String integerCacheHighPropValue =
			sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
		if (integerCacheHighPropValue != null) {
			int i = parseInt(integerCacheHighPropValue);
			i = Math.max(i, 127);
			// Maximum array size is Integer.MAX_VALUE
			h = Math.min(i, Integer.MAX_VALUE - (-low));
		}
		high = h;

		cache = new Integer[(high - low) + 1];
		int j = low;
		for(int k = 0; k < cache.length; k++)
			cache[k] = new Integer(j++);
	}

	private IntegerCache() {}
}

至于情况(1),可能为true,也可能为false,java要求-128到127必须缓存,所以在这个范围内的情况(1)一定为true,超出这个范围的看具体实现和参数,jdk7就有参数可以调整这个缓存的大小。
7 楼 zhchx0827 2012-03-02  
就两点:自动拆箱,缓存。看下源码就清楚了
6 楼 837062099 2012-03-02  
edisonlv2010 写道
这里其实就两个考察点

1.常量池的知识

和String的对象池一样,几种整数基础类型的包装类型也有对象池机制。也就是说用Integer int1 = 30这种方式声明一个Integer对象时会先到对象池中找有没有值为30的对象,如果有直接拿来用,如果没有则重新创建一个对象放入对象池中。

缓存范围[-128到127],超出此范围的不会被缓存。而128刚好超出,所以i1 == i2的结果为false,如果在缓存范围内,那i1 == i2的结果就为true

2.自动装箱自动折箱的知识

System.err.println(i1 == i3);//(2) 
System.err.println(i2 == i3);//(3) 
这两行代码都隐式做了折箱操作


"缓存范围[-128到127],超出此范围的不会被缓存"===>这句话请仔细讲一下。
5 楼 wind_1121 2012-03-02  
jdk1.5支持自动装箱和拆箱,Integer类型自动转为int类型,Integer类型比较的是内存地址,可定不同
4 楼 edisonlv2010 2012-03-02  
这里其实就两个考察点

1.常量池的知识

和String的对象池一样,几种整数基础类型的包装类型也有对象池机制。也就是说用Integer int1 = 30这种方式声明一个Integer对象时会先到对象池中找有没有值为30的对象,如果有直接拿来用,如果没有则重新创建一个对象放入对象池中。

缓存范围[-128到127],超出此范围的不会被缓存。而128刚好超出,所以i1 == i2的结果为false,如果在缓存范围内,那i1 == i2的结果就为true

2.自动装箱自动折箱的知识

System.err.println(i1 == i3);//(2) 
System.err.println(i2 == i3);//(3) 
这两行代码都隐式做了折箱操作
3 楼 cuisuqiang 2012-03-02  
对象比较和值比较能一样吗
一个是应用比较,一个是值比较,==是比较其引用,如果不是对象那就是比较的值
神马呀
2 楼 my_java_life 2012-03-02  
自动封装,不是把原始类型封装成对象类型---向上转型。
1 楼 fuchao01 2012-03-02  
2,3两种应该是java5的新特性自动封装,他将对象转化为int型,所以相等!

相关推荐

    java面试题广州

    从给定的文件信息中,我们可以总结出一系列与Java面试相关的知识点,这些知识点不仅涵盖了基本的Java编程概念,还涉及到了面试中常见的算法、数据库处理、Web开发框架、设计模式等高级主题。下面是对这些知识点的...

    Java 后端面试题附答案

    ### Java后端面试题知识点解析 #### 1. ArrayList初始化及扩容机制 - **知识点**: - `ArrayList`的内部实现与扩容机制。 - **解释**: - `ArrayList`是一个动态数组,初始容量可以通过构造函数指定。当构造一个`...

    2023阿里java面试题

    总结来说,这三个面试问题涵盖了链表操作、无库计算以及二叉搜索树的特性利用,这些都是在实际编程和面试中常见的数据结构和算法问题,体现了对基础概念的掌握、问题解决能力和算法设计能力的要求。对于求职者来说,...

    JAVA面试题(2018)

    在2018年的Java中级面试题中,涵盖了广泛的Java相关知识点。这些知识点包括但不限于数据结构、网络协议、算法、多线程与并发编程、数据库技术、内存管理和编程思想等方面。接下来,我会详细说明这些知识点。 首先是...

    JAVA基础编程练习题50题及经典算法90题【含源码及答案】-史上最全

    Java基础编程练习题和经典算法是提升编程技能和准备面试的关键环节。这50题的基础编程练习涵盖了Java语言的核心概念,如数据类型、控制结构、类与对象、异常处理、集合框架等,旨在帮助学习者巩固基础知识并提高编程...

    面试题和算法

    一、Java面试题 1. **Java基础**:Java语言的基础知识是任何面试的起点,包括变量、数据类型、运算符、控制结构(如if-else,switch-case,for,while,do-while)、类、对象、封装、继承、多态等。理解这些概念并...

    Java基础面试题锦集(附答案)

    Java作为一门广泛使用的编程语言,其面试题涵盖了基础语法、面向对象特性、内存管理、集合框架、多线程等多个方面。...以上是Java面试中常见的知识点,理解并掌握这些将有助于你在面试中脱颖而出。

    最新2年经验的Java面试题

    以下是对“最新2年经验的Java面试题”中提及的几个典型问题的深入解析,旨在帮助准备面试的Java开发者更好地理解这些知识点。 #### 1. 设计模式详解 设计模式是解决特定类型问题的模板或指导原则,它们在软件工程...

    Java面试题汇总

    ### Java面试题汇总知识点 #### 一、Java连接数据库及PreparedStatement与Statement的区别 - **连接数据库的步骤**: 1. 加载JDBC驱动; 2. 创建数据库连接; 3. 创建Statement或PreparedStatement对象; 4. ...

    滴滴Java工程师岗位面试真题

    以上就是滴滴Java工程师面试中涉及的一些关键知识点,这些内容不仅要求面试者具备扎实的基础知识,还需要他们能够灵活应用解决实际问题。对于准备面试的程序员来说,理解和掌握这些知识点是非常重要的。

    java的2道算法题,笔试面试题

    标题中的两道算法题目是Java面试中常见的类型,它们分别涉及到数组操作和图的最短路径问题,这对于应届毕业生在IT公司的招聘过程中非常重要。以下是这两道题目的详细解析及解决方案。 第一题:寻找两个有序数组的...

    2021数据结构与算法面试题

    数据结构与算法是计算机科学的基础,对于...以上知识点是数据结构与算法面试题中常见的部分,每个主题下都可能有深入的理论讲解和实践题目,对于准备面试的开发者来说,全面掌握这些内容将大大提升在面试中的竞争力。

    腾讯java 面试题

    ### 腾讯Java面试题解析:应对NP完全问题及寻找小顶点覆盖 #### 应对NP完全问题 在IT行业中,面对NP完全问题时,我们常常会遇到理论与实践之间的矛盾。按照理论,NP完全问题是很难找到多项式时间算法解决的。然而...

    Java面试题

    现根据提供的文件内容,对Java面试题集中的知识点进行详细解读。 一、XML部分 XML是可扩展标记语言,广泛应用于配置文件、数据交换、网络服务等领域。 1. XML解析技术主要有DOM、SAX和STAX。 - DOM(Document ...

    一线互联网大厂算法面试问题Java实现

    在当前的IT行业中,算法能力是衡量一个程序员技术深度的重要指标,特别是在一线互联网大厂的面试过程中。"一线互联网大厂算法面试问题Java实现"这个压缩包文件集合了多个知名公司的算法面试题目的Java实现,包括谷歌...

    ja va 经典面试题

    - **AWT简介**:Abstract Window Toolkit(AWT)是Java中的另一个GUI工具包,主要用于早期的Java版本中。Swing是在AWT的基础上发展起来的,因此Swing程序可以使用AWT的一些组件。 ### 8. Java异常处理 - **System....

    算法大全-面试题-数据结构

    总之,面试中关于单链表的题目不仅仅是对链表操作技术的考察,更多是对应聘者逻辑思维能力、问题解决能力以及编程习惯的考察。应聘者需要熟练掌握链表的基础知识,理解其内部结构,能够通过编程语言实现链表的各种...

    LeetCode Java Algorithm 记录数据结构与算法训练题,分享java面试题.zip

    在本压缩包“LeetCode Java Algorithm 记录数据结构与算法训练题,分享java面试题.zip”中,主要包含的是关于Java编程语言的数据结构与算法的相关训练题目和可能的面试问题。这些资源对于提升Java开发者的技术能力,...

Global site tag (gtag.js) - Google Analytics