`

JAVA面试题解惑系列(八)——聊聊基本类型(内置类型)

阅读更多
removed.

请到博文下载PDF文件:http://zangweiren.iteye.com/blog/241218
42
13
分享到:
评论
57 楼 lyongjn 2013-11-23  
深入浅出,很容易理解,而且覆盖也很全面,看得出来花了相当大的精力编写。多谢LZ。
56 楼 wzju64676266 2010-02-07  
bboyuan 写道
臧圩人 写道
liaozh2004  写道
int型值可以赋给所有数值类型的变量;?????


是的,而且还包括char型:
public class Test {
	public static void main(String[] args) {
		byte b = (int) 1;
		short s = (int) 1;
		int i = (int) 1;
		long l = (int) 1;
		float f = (int) 1;
		double d = (int) 1;

		char c = (int) 1;
	}
}


连着看了博主的前几篇文章,让我更深刻的理解了java,非常感谢。
另外,我想再想博主请教一下,虽然按照char c = (int)1;这样写是可以的。
但是,为什么直接把int的引用赋值给char c就不行了呢?
请再帮我分析一下原因吧。
代码如下:

public class Test {

	public static void main(String [] args) {

		int i = 1;
                // Type mismatch: cannot convert from int to char
		char c = i;
		System.out.println(c);
	}

}




char c = (int)1  这样定义其实编译器做了处理,形成char c = '\001';
而下面的编译器不做处理,你只能强制转换
int i = 1;
// Type mismatch: cannot convert from int to char
char c = i;



int数值可以赋给所有数值类型的变量???

其实小于int类型的byte short char 都可以随便赋值的,只要不超出范围,在jdk5.0下都已经做了优化,
例如:
byte b = (short) 1;  
short s = (int) 1;  
int i = (int) 1;  
char cc = (byte) 1; 
会形成
byte b = 1;
short s = 1;
int i = 1;
char cc = '\001';

,这样效果就跟直接赋值一样,开发过程中如果这么写,就等于脱了裤子放屁,
但float double就不可以了


55 楼 bboyuan 2009-12-18  
臧圩人 写道
liaozh2004  写道
int型值可以赋给所有数值类型的变量;?????


是的,而且还包括char型:
public class Test {
	public static void main(String[] args) {
		byte b = (int) 1;
		short s = (int) 1;
		int i = (int) 1;
		long l = (int) 1;
		float f = (int) 1;
		double d = (int) 1;

		char c = (int) 1;
	}
}


连着看了博主的前几篇文章,让我更深刻的理解了java,非常感谢。
另外,我想再想博主请教一下,虽然按照char c = (int)1;这样写是可以的。
但是,为什么直接把int的引用赋值给char c就不行了呢?
请再帮我分析一下原因吧。
代码如下:

public class Test {

	public static void main(String [] args) {

		int i = 1;
                // Type mismatch: cannot convert from int to char
		char c = i;
		System.out.println(c);
	}

}

54 楼 lahvey 2009-07-29  
正数四舍五入
复数五舍六入
对否?
53 楼 shanshan_shan 2009-02-26  
对我的帮助很大。。。说的很是到位,把我不懂的细节都说的透彻。
52 楼 wangyazhen 2009-02-05  
臧圩人 写道

回复yuxh2008:
yuxh2008 写道
谢谢楼主, 提个建议先: 关于Math.round()方法曾看过一本书, 记忆相当深刻(当时初学java无意中看到这种方法简直佩服的五体投地), 这样记或许比较简单, 不管是什么参数, +0.5后再取整. 你仔细比较运行结果就会发现,+0.5后再取整是有问题的

那个貌似可以这样处理

如果参数是正数,则将参数+0.5 然后取参数的整数部分
如果参数是负数,则将参数-0.4 然后取参数的整数部分
不知道楼主怎么看
51 楼 dclwork 2008-12-17  
目前中国的程序员普篇水平还比较低和国外差很远,特别是高端软件人才算是凤毛麟角,我看了许多的国内出版的书(包括清华大学著名教授的书)也不怎么样,所以我经常卖国外的书开,不过在看了LZ的文章后感觉比国外资深专家写的毫不逊色,而且也符合中国人的思维方式,中国只有有你这样的程序员,软件行业才有真正的出路!
50 楼 Ronald9 2008-12-07  
   1. byte、char、short、int四种基本类型以及它们的包装类(需要Java5.0/1.5以上版本支持)都可以用于switch语句。
   2. long、float、double、boolean四种基本类型以及它们的包装类(在Java所有版本中)都不能用于switch语句。
   3. enum类型,即枚举类型可以用于switch语句,但是要在Java5.0(1.5)版本以上才支持。
   4. 所有类型的对象(包括String类,但在Java5.0/1.5以上版本中,该项要排除byte、char、short、int四种基本类型对应的包装类)都不能用于switch语句。


上面的是您的总结..我觉得太麻烦了.下面是我的总结:

switch(表达式)
第1类:
只要结果是 int 类型及其兼容类型就可以了.
1)byte, short, char类型因为不参与运算.在运算时直接转成int类型.所以它们都可以用在 switch语句中.
2)int类型不用说,肯定能用.
3)至于float, double类型,只要能转换成int类型就可以了.
float f1 = 2.3f;
switch ((int)f1) 这样也没什么不可以...
第2类:
可以使用枚举类型

其他都不可以,boolean类型根本不与其他类型进行运算所以根本不用考虑
49 楼 Ronald9 2008-12-07  
对不起.是我的错.
因为我看得崩溃了.没看到你下面有说明..
这是我的错.对不起.麻烦您删了我刚发的..
再次声明对不起..我没看完..呵呵.
48 楼 Ronald9 2008-12-07  
楼主.看了你的这些教程.感觉有些还是不错.可是有些地方却也是有些值得商榷的地方..

1)
int int_int = 0; 
// int类型用Integer类型初始化 
int int_Integer = new Integer(0); 
// Integer类型用Integer类型初始化 
Integer Integer_Integer = new Integer(0); 
// Integer类型用int类型初始化 
Integer Integer_int = 0;

像这种写法估计没几个人会这样写.如果是程序员的话,当然.我猜测你只是想试图说明这个变量的作用吧.建议按Java规范取名..这种写法:第1看得难受,第2写起来也麻烦.

还有这里也是.
boolean boolean_boolean = true; 
// boolean类型用Boolean类型初始化 
boolean boolean_Boolean = new Boolean(true); 
// Boolean类型用Boolean类型初始化 
Boolean Boolean_Boolean = new Boolean(true); 
// Boolean类型用boolean类型初始化 
Boolean Boolean_boolean = true;

几乎看得让人崩溃..有些地方能简化就不要这样复杂了..

当然.我觉得您的这些文章还是相当不错的了..请不要见怪..

您是老师是吗??应该不会是程序员吧.
47 楼 Ronald9 2008-12-07  
Integer i1 = 1000;
Integer i2 = 1000;
System.out.println(i1==i2);
System.out.println(i1.equals(i2));

Integer i3 = 100;
Integer i4 = 100;
System.out.println(i3==i4);
System.out.println(i3.equals(i4));

具体过程你可以去参看SCJP考试的书籍.大意如下:
1)语句: Integer i1 = 1000
是自动装箱.是JDK 5.0之后提供的新功能. 与JDK1.4之前的语句等同
Integer i1 = new Integer(1000);

2)i1==i2是判断引用是否相等,因为i1和i2是不同对象所以  打印:false
i1.equals(i2)是判断对象是否相等,,打印:true

3)i3==i4,也是判断引用是否相等,但是java在处理时,如果包装类的值是在-128到127之间,会认为i3==i4,所以这个地方也是打印: true,而上面i1, i2不在-128到127之间,所以不满足这规则.

i3.equals(i4)   打印 true

46 楼 jackdown 2008-10-09  
引用
// 把一个long型值赋值给short型变量,编译时会报错,即使这个值没有超出short类型的取值范围  
// byte short_c = 1L;  


小小的问题
45 楼 lishali12345 2008-09-10  
确实非常的好,特别是对于像我这样的初学者!
十分之有用!
44 楼 臧圩人 2008-08-10  
回复uriesijsif:

引用
1、运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符右边数值类型相同。


这里,最后运算结果应该是与左边的数值类型相同,此处是笔误,新版本中已经修正。

引用
我想应该是这样:1、运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,执行运算的时候会进行提升,但运算结果会强制转换成运算符左边的类型。


我也是这么认为的,请参考这里:

引用
当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:

1、只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
2、否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;
3、否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;
4、否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。
43 楼 臧圩人 2008-08-10  
CJSDN网友uriesijsif写道:

引用
上面那个发错了,麻烦版主删下,我要问的是:
1、运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符右边数值类型相同。

运算符右边的数值被强制转换成运算符左边的类型后,再执行运算,运算的时候会进行提升吗,比如说二个short型的变量参加算术运算时会提升为 int型,其结果也是int型,而这里 short s=1;s+=1;先把1转换成short型,然后运算,运算的时候会提升吗???
我想应该是这样:1、运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,执行运算的时候会进行提升,但运算结果会强制转换成运算符左边的类型。
42 楼 臧圩人 2008-08-06  
回复jiakechong:

jiakechong 写道

int型值可以赋给所有数值类型的变量
//////////
这句话不对把,不能赋值给byte,short把
如int int_a =1;
byte byte_a = int_a 会有错误把


看来是我的表述让大家误会了,我指的是int型的数值,不是int型的变量。
41 楼 jiakechong 2008-08-06  
int型值可以赋给所有数值类型的变量
//////////
   这句话不对把,不能赋值给byte,short把
如int int_a =1;
  byte byte_a = int_a 会有错误把
40 楼 臧圩人 2008-08-03  
回复evonli:

evonli 写道
rand 是 参数+0.5的floor值, 而floor返回一个<=参数的,最接近double无穷大的值.
然后就很容易算出来了


这是JDK中注释的写法,不过有点艰涩难懂(就是最接近double无穷大的值这里),这样理解反而容易些:

臧圩人 写道

对于round方法的参数i,经计算后的值是一个<=(i+0.5)的最大整数。
39 楼 evonli 2008-08-01  
rand 是 参数+0.5的floor值, 而floor返回一个<=参数的,最接近double无穷大的值.
然后就很容易算出来了
38 楼 臧圩人 2008-07-31  
liaozh2004  写道
int型值可以赋给所有数值类型的变量;?????


是的,而且还包括char型:
public class Test {
	public static void main(String[] args) {
		byte b = (int) 1;
		short s = (int) 1;
		int i = (int) 1;
		long l = (int) 1;
		float f = (int) 1;
		double d = (int) 1;

		char c = (int) 1;
	}
}

相关推荐

    JAVA面试题解惑系列合集

    .46 1.8 JAVA面试题解惑系列(八)——聊聊基本类型(内置类型) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 1.9 JAVA面试题解惑系列(九)——继承、多态、重载和重写 . . . . . . . . . . ....

    臧圩人--JAVA面试题解惑系列合集.pdf

    **1.8 JAVA面试题解惑系列(八)——聊聊基本类型(内置类型)** - **知识点**:讨论Java的基本数据类型,包括整型、浮点型、字符型、布尔型等,以及它们的包装类和自动装箱/拆箱机制。 **1.9 JAVA面试题解惑系列...

    JAVA面试题解惑系列.rar

    Java面试题解惑系列主要涵盖了Java编程语言的核心概念、进阶技术以及在面试中常见的问题。这个压缩包可能包含了两本书籍,一本是"JAVA面试题解惑系列.pdf",另一本是"臧圩人--JAVA面试题解惑系列合集.pdf"。这些资源...

    《经典JAVA面试题解惑系列合集(臧圩人)》

    《经典JAVA面试题解惑系列合集(臧圩人)》这本书很可能就是针对这些问题进行深入解析的一本指南。 首先,Java的基础知识是面试中的必考部分。这包括但不限于Java语法、数据类型、控制结构(如if语句、for循环、...

    Java面试题解惑系列

    来自网络,主要包括以下内容:1、类初始化的顺序;2、到底创建了几个String对象;3、变量(属性)的覆盖...8.基本类型总结;9.继承,多态,重载,重写;10.多线程;11.运算符总结。 适合将要笔试面试Java的朋友参考。

    JAVA面试题解惑系列——类的初始化顺序

    在Java中,类的初始化顺序是一个经常被问及的面试题目,尤其对于Java程序员和工程师来说,了解这个知识点是必须的。在Java中,类的初始化顺序是面试中的经典问题之一,它涉及到继承、静态成员以及实例成员等多个方面...

    JAVA面试题解惑系列

    JAVA面试题解惑系列 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的 关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某 种运算,另外还有...

    Java全能学习面试手册——互联网企业面试真题.zip

    Java全能学习面试手册——互联网企业面试真题.zip 01 java面试——北京-百度-Java中级.pdf 02 java面试——北京-京东-Java中级.pdf 03 java面试——广州-唯品会-Java大数据开发工程师.pdf 04 java面试——杭州-阿里...

    115个Java面试题和答案——终极列表

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,涵盖范围广泛,从基础概念到高级特性和设计模式。这份终极列表包含115个Java面试题和答案,旨在帮助求职者全面准备,以期在面试中表现出色。以下是部分核心...

    Java面试题详解,和一些基础知识的深入剖析,个人认为非常棒

    “JAVA面试题解惑系列(八)——聊聊基本类型(内置类型)”涵盖了Java的原始数据类型,包括int、char、boolean等,它们与引用类型的不同之处以及它们的默认值和范围。 “JAVA面试题解惑系列(九)——继承、多态、...

    JAVA面试题解惑系列.zip

    【标题】"JAVA面试题解惑系列.zip" 提供的内容主要聚焦于Java编程语言在面试中的常见问题及其解答。这通常涉及到Java的核心概念、高级特性、设计模式、并发编程、集合框架、IO/NIO流、异常处理、垃圾回收机制、多...

    java程序员面试题——863面试集

    ### Java程序员面试题详解 #### 一、Java基础知识 1. **作用域public, private, protected, 以及不写时的区别** - **public**: 可以被任何类访问。 - **protected**: 可以被同一包内及不同包内的子类访问。 - ...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

Global site tag (gtag.js) - Google Analytics