SCJP_104——题目分析(4)
14. which three are valid declaraction of a float? ADF
A. float foo=-1;
B. float foo=1.0;
C. float foo=42e1;
D. float foo=2.02f;
E. float foo=3.03d;
F. float foo=0x0123;
这一题考的是 Java 的基本数据类型和类型转换。
在 Java 中规定,整数字面值默认为 int 类型,浮点数字面值默认为 double 类型。
A:-1 是 int 类型,可以自动转换成 float 类型。
B:1.0 是 double 类型,高位向低位转换,会丢失精度,Java 不允许这样的转换,除非进行强制转换。
C:42e1 是 double 了性,理由同上。
D:答案正确。
E:3.03d 是 double 类型。
F:0X0123 是整数291,会自动进行类型转换。
所以答案是:ADF
16.
1) public class Test{
2) public static void main(String args[]){
3) int i=0xFFFFFFF1;
4) int j=~i;
5)
6) }
7) }
which is decimal value of j at line 5?
A. 0 B.1 C.14 D.-15 E. compile error at line 3
这里考察的是 Java 中的进制转换和位运算符
0xFFFFFFF1 是十六进制,转换成 2 进制是 1111 1111 1111 0001
同时 ~ 是取补码的运算,也就是 0 变 1,1 变 0,运算后的结果是 0000 0000 0000 1110,转换成 10 进制是 14。
所以正确答案是:C
17.
float f=4.2F;
Float g=new Float(4.2F);
Double d=new Double(4.2);
Which are true?
A. f==g B. g==g C. d==f D. d.equals(f) E d.equals(g) F. g.equals(4.2);
这里考察了 Java 中的对象引用、==、equals 的知识点
f 表示 float 变量的名字,g 表示对象的引用,所以 f == g ,这样的比较是不合法的
g 是一个指向 Double 的引用,g == g,g 肯定是等于 g,所以正确。
d == f 和 f == g 类似,也是不合法的
equals,这里要注意,要和 == 区分开来,重点说明一下 == 和 equals 之间的区别。
首先要说 Java 中的数据类型。在 Java 中有两种数据类型:基本数据类型和引用数据类型。
基本数据类型包括:
byte、short、int、char、long、float、double、boolean
它们之间的比较应该用 == 进行比较,比较的是它们的值。
除了这 8 中基本数据类型以外的数据类型,都叫引用数据类型。所谓引用,就是内存中的地址。因为在 Java 中,为了安全,用一个类似指针的东西来指向存放数据的内存地址。所以对引用数据类型来说,当使用 == 进行比较的时候,比较的是内存中的地址。
所以,除非两个引用变量指向同一个内存地址,使用 == 进行比较才能得到 true,否则就是 false
Java 当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
下面说几个例子,看看 equals 和 == 区别
例子1:
public class TestString
{
public static void main(String[] args)
{
String s1 = "Monday";
String s2 = "Monday"; if (s1 == s2)
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");
}
}
输出结果:
s1 == s2
在稍微改动下程序
例子2:
public class Test
{
public static void main(String args[])
{
String s3 = "Monday";
String s4 = new String("Monday"); if (s3 == s4)
{
System.out.println("s3 == s4");
}
else
{
System.out.println("s3 != s4");
} if (s3.equals(s4))
System.out.println("s3 equals s4");
else
System.out.println("s3 not equals s4");
}
}
输出结果
s3 != s4
s3 equals s4
结果为什么会是这样?
这里涉及到了一个字符串缓存池的概念。
原来,程序在运行的时候,会创建一个字符串缓存池。当使用 String s2 = "Monday" 创建一个字符串的时候,程序首先会在字符串缓冲池中寻找相同值的对象。而之前已经创建了一个 s1 对象,所以在 s2 被创建的时候,程序找到了具有相同值的 s1。这样一来,s1 和 s2 就有了相同的地址。所以就有了例子 1 中的输出结果。
在例子 2 中,s4 使用了关键字 new,在内存开辟了一个空间用来存放 "Monday",s4 指向这个内存位置。所以结果就很明显了。
参考资料:http://www.cnblogs.com/jackyrong/archive/2006/08/20/481994.html
感谢参考资料作者的辛勤劳动
SCJP_104——题目分析(4)的更多相关文章
- SCJP_104——题目分析(5)
18. public class Test { public static void add3(Integer i) { int val=i.intvalue(); val+=3; i=new Int ...
- SCJP_104——题目分析(2)
3. public class IfTest{ public static void main(String args[]){ int x=3; int y=1; if(x=y) System.out ...
- SCJP_104——题目分析(1)
1.1) public class ReturnIt{2) returnType methodA(byte x, double y){3) return (short)x/y*2;4) }5) }wh ...
- SCJP_104——题目分析(3)
11. what is reserved words in java?A. run B. default C. implement D. import Java 中,给标识符取名的时候,不能使用关键字 ...
- SCTF 2014 pwn题目分析
因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很 ...
- 路由器漏洞复现分析第三弹:DVRF INTRO题目分析
这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 本文通过练习DVRF 中INTRO 部分的题目来学习下MIPS 结构下的各种内存攻击. DVRF: ...
- 二分查找总结及部分Lintcode题目分析 2
Search in a big sorted array,这个比之前的二分法模板多了一个很不同的特性,就是无法知道一个重要的条件end值,也是题目中强调的重点 The array is so big ...
- 【算法】题目分析:Aggressive Cow (POJ 2456)
题目信息 作者:不详 链接:http://poj.org/problem?id=2456 来源:PKU JudgeOnline Aggressive cows[1] Time Limit: 1000M ...
- *CTF babyarm内核题目分析
本文从漏洞分析.ARM64架构漏洞利用方式来讨论如何构造提权PoC达到读取root权限的文件.此题是一个ARM64架构的Linux 5.17.2 版本内核提权题目,目的是读取root用户的flag文件 ...
随机推荐
- traits编程技法
看了<stl源码剖析>中关于traits的部分,由于对模板还不是很熟悉,就看了一下还未完工的C++ Template 进阶指南 ,感觉收获很大,推荐一下. 在使用迭代器时,为了知道它的相应 ...
- 路由器刷机常见第三方固件及管理前端种类(OpenWrt、Tomato、DD-Wrt)
目前路由器折腾刷机,除了采用各品牌的原厂固件外,第三方路由器固件,基本就是:Tomato.DD-WRT.OpenWRT三种. 基本上所有第三方路由器固件的架构上可分为前端(Frontend)和后端(B ...
- B - Dungeon Master
题目大意: 地牢大师(感觉像是一款游戏啊.......) 你被困在一个3D的地牢里面,并且需要发现最快的出去的路,这个地牢由很多小立方体组成,有的是空的可以走,有的被岩石填充了不可以走,移动一 ...
- MVC的特点
1.MVC模式 Mvc将应用程序分离为三个部分: Model:是一组类,用来描述被处理的数据,同时也定义这些数据如何被变更和操作的业务规则.与数据访问层非常类似. View:是一种动态生成HTML的模 ...
- opencv_形态学结构化元素对形态学图像处理的影响
场景 对大米预处理之后的二值图像做开运算再做canny边缘检测. python代码: # kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3 ...
- JSP简易留言板
写在前面 在上篇博文JSP内置对象中介绍JSP的9个内置对象的含义和常用方法,但都是比较理论的知识.今天为大家带来一个小应用,用application制作的简易留言板. 包括三个功能模块:留言提交.留 ...
- 如何把textfield或者textview中长按出现的(全选,复制,粘贴)显示成中文
ios在配置文件info.plist 中添加Localiztion native development region (本地化设置) 设置为 china
- UVALIVE 4819 最大流
题意:有N场比赛,每场比赛需要一定数量的题目数,现在有M个题目,每个题目只能提供给特定的几场比赛,并且一次只能在一场比赛中出现. 问最多可以举办多少场比赛. 思路:因为N = 15 , 所以直接二进制 ...
- 账户管理命令 useradd、groupadd
内容提要: 1. 掌握用户的 增/删/改 命令 2. 掌握组的 增/删/改 命令 组管理 1)groupadd groupadd 用于添加组账号.格式如下: groupadd [-g GID] GRO ...
- Windows与Linux文件共享
Windows与Linux文件共享 Samba服务器 安装Samba服务器 rpm –ivh /mnt/Packages/Samba-3.5.10-125.el6.i686.rpm 添加用户并修改密码 ...