黑马程序员技术交流社区

标题: Java 面试题 分享 [打印本页]

作者: 0_TNT_0    时间: 2014-12-10 21:30
标题: Java 面试题 分享
1.        short s = 1;
        s = s + 1;               
        short s = 1;
        s+=1;
                       
        请问能否编译通过么?

作者: 18334705181    时间: 2014-12-10 21:33
应该是不能的,因为s=s=
作者: 0_TNT_0    时间: 2014-12-10 21:33
2. 问 char  c  =  7;
作者: 0_TNT_0    时间: 2014-12-10 21:34
char c = 7;System.out.println(c);    请问输出结果是什么?  求大神来讨论啊
作者: 0_TNT_0    时间: 2014-12-10 21:37
char c = 7;System.out.println(c);
char b = '7';System.out.println(b);   

请问输出结果分别是什么?  为什么会这样呢?变量c 和 b是什么类型的?都是char类型?
求大神解释啊。。。。
作者: 高慧觉    时间: 2014-12-10 21:39
编译能通过,结果出不来。:L

作者: 0_TNT_0    时间: 2014-12-10 21:41
18334705181 发表于 2014-12-10 21:33
应该是不能的,因为s=s=

什么意思?
作者: sam3say    时间: 2014-12-10 21:56
这个,哈哈哈哈
作者: Honelyboy    时间: 2014-12-10 22:09
编译不能通过。
short s = 1;
        s = s + 1;  //等号右边的s+1计算完类型提升为int型,不能直接赋值给等号左边的s。改为s=(short)(s+1);
作者: 爱卿    时间: 2014-12-10 22:15
会编译失败,s=s+1;这句运算的时候会自动提升到int类型 之后再赋值给short类型的s 会损失精度
作者: 爱卿    时间: 2014-12-10 22:16
0_TNT_0 发表于 2014-12-10 21:33
2. 问 char  c  =  7;

这个可以的 数字7在编码表里面代表一个符号 具体符号我不知道。。反正是可以编译通过的 今天我还特意试了一下char c =111;这样都是可以的
作者: 0_TNT_0    时间: 2014-12-10 22:18
Honelyboy 发表于 2014-12-10 22:09
编译不能通过。
short s = 1;
        s = s + 1;  //等号右边的s+1计算完类型提升为int型,不能直接赋值 ...

厉害  啊  大神  多谢
作者: manu_chen    时间: 2014-12-10 22:21
只能看看了,学习中。
作者: 0_TNT_0    时间: 2014-12-10 22:21
爱卿 发表于 2014-12-10 22:16
这个可以的 数字7在编码表里面代表一个符号 具体符号我不知道。。反正是可以编译通过的 今天我还特意试了 ...


char c = 7;System.out.println(c);
char b = '7';System.out.println(b);   

请问输出结果分别是什么?  为什么会这样呢?变量c 和 b是什么类型的?都是char类型?
求大神解释啊。。。。
作者: 0_TNT_0    时间: 2014-12-10 22:23
高慧觉 发表于 2014-12-10 21:39
编译能通过,结果出不来。

大神 试过了么
作者: 不给吃鸭梨    时间: 2014-12-10 22:28
莫名的眼熟呢,难道:lol
自赋值带强制转换功能
作者: 0_TNT_0    时间: 2014-12-10 22:33
高慧觉 发表于 2014-12-10 21:39
编译能通过,结果出不来。

大神是 1208 的么
作者: 爱卿    时间: 2014-12-10 22:40
0_TNT_0 发表于 2014-12-10 22:21
char c = 7;System.out.println(c);
char b = '7';System.out.println(b);   

第一行输出的结果是一个输出一个控制符BEL 这个在控制台是看不到的 看起来就是个空值,用的println 所以你看到的就会是一行空的。你可以百度ASCⅡ 这个编码表详细的介绍了每个字符在计算机内的表示方法。比如65是大写的A。
第二行输出结果就是7 因为这个7用单引号引起来了 他就是表示字符7. 同理 如果你用ASCⅡ编码表输出7的话 你可以试试char a=55;System.out.print(a); 输出结果还是7.
作者: 0_TNT_0    时间: 2014-12-10 22:44
爱卿 发表于 2014-12-10 22:40
第一行输出的结果是一个输出一个控制符BEL 这个在控制台是看不到的 看起来就是个空值,用的println 所以 ...

我试过了,第一句话char c = 7;System.out.println(c);   会发出一个“嘀”声,  那 变量 c  还是 char 类型的么  ?  

作者: 爱卿    时间: 2014-12-10 22:49
0_TNT_0 发表于 2014-12-10 22:44
我试过了,第一句话char c = 7;System.out.println(c);   会发出一个“嘀”声,  那 变量 c  还是 char  ...

7号编码好像就是个什么BEL响铃  至于c 没报错 说明是char类型吧。 我也是才学几天。 不确定
作者: 清浅。。    时间: 2014-12-10 22:51
编译不能通过。 short s = 1;         s = s + 1;  //等号右边的s+1计算完类型提升为int型,不能直接赋值给等号左边的s。改为s=(short)(s+1);这样就可以编译成功了。
作者: 0_TNT_0    时间: 2014-12-10 22:54
不给吃鸭梨 发表于 2014-12-10 22:28
莫名的眼熟呢,难道
自赋值带强制转换功能

难道 是1208的 同学吗
作者: 0_TNT_0    时间: 2014-12-10 22:56
爱卿 发表于 2014-12-10 22:49
7号编码好像就是个什么BEL响铃  至于c 没报错 说明是char类型吧。 我也是才学几天。 不确定 ...

难道是 1208 的么
作者: 爱卿    时间: 2014-12-10 23:06
0_TNT_0 发表于 2014-12-10 22:56
难道是 1208 的么

难道你也是么。
作者: 清浅。。    时间: 2014-12-10 23:19
我去  你们一个班的???
作者: 清浅。。    时间: 2014-12-10 23:21
我还以为是一个班的呢!呵呵
作者: 0_TNT_0    时间: 2014-12-10 23:25
清浅。。 发表于 2014-12-10 22:51
编译不能通过。 short s = 1;         s = s + 1;  //等号右边的s+1计算完类型提升为int型,不能直接赋值给 ...

感谢。互相学习,加个好友吧
作者: 侯鹏成    时间: 2014-12-10 23:54
不能编译通过,因为s+1默认是int类型,这样把s+1的值赋值给short会损失精度,可以这样改s=(short)(s+1),而s+=1则默认强制转换
作者: 安卓小蜗牛    时间: 2014-12-11 00:18
不能,都一样的啊!
作者: 夏夏更健康    时间: 2014-12-11 11:51
受教了!
作者: 南柯一梦境    时间: 2014-12-11 13:00

0_TNT_0 发表于 2014-12-10 22:44
我试过了,第一句话char c = 7;System.out.println(c);   会发出一个“嘀”声,  那 变量 c  还是 char  ...
当然是char型的了,因为计算机底层的都是二进制,7正好对应ascii码表中的 BEL (bell) 响铃所以才能够用7表示,而不报错,但是你已经定义了char  c=7 所以c仍然是char型,只不过能用ascii码表中对应的数字表示而已。

作者: 双鱼座程序员    时间: 2014-12-11 13:24
学习了,大家对细节挺关注的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2