Java的类一些常识
java实习报告

java实习报告java实习的开展能使实习生们在编程的理论知识上有所巩固和深化,有实操的经验。
以下是小编为大家精心整理的java 实习报告,欢迎大家阅读。
1、传统的错误观念以前以为教学视频和代码看多,自己就懂的多,实际做起来,却不知从何下手,问题在那?如何定位?如何解决?通通跟一样能力有关,debug追踪能力,也称调试.在项目组工作不愁源码资源,但问题是蛋糕摆在面前,你如何去消化?有位同事告诉我:代码看几遍都没用,要去抄,例如一个查询模块,在此基础上去做具体记录的历史记录查询模块,你可能会觉得很简单,但实际情况却往往报一堆异常,配置问题涉及到方方面面,以及数据库字段,传值问题等等,一大堆对于新人来说很郁闷的问题.但不用怕,只要学会调试,一个个问题去追踪,一个个去解决,自然而然,那段“源码”才真正属于你.2、如何调试追踪?如果你能在短短的时间内就看到问题点在那,放下断点去追踪,出去找工作,绝对没问题.出现问题的时候,不要光看代码,要用实际行动去追踪运行期间的具体值,那是最好途径.eclipse是个很爽的idea,这点做的很好.例如页面内容显示不是自己想要的数据,我们要先从数据库查询语句去下手,设置断点,一步一步step over,让sql字段(存取最终sql语句的字符串)运行到有值,inspect进去看,如果还看不出来,就点击它,copy后在sql客户端去实际运行,看看实际查询出来的表是什么,如果是对的,有可能就是页面调用的错误或者action逻辑的传值问题.页面错误的调试,基本方法是用右键点击实际网页查看源代码,copy到editplus,就能看到具体错误发生在那几行.通常有几种常见的错误,.例如.缺少对象这种很多时候是有些被你调用的字段有可能为空的情况出现的,可以加if(xxx=null)语句加保护.追踪的方法基本就是用alert语句,放在有可能出错的地方.毕业实习总结3、一些习惯遇到问题先自己思考,无从下手再找高手帮忙看看,注意他帮你看的思路,别在一旁闲着,看多了自己也会了,不然你一辈子都停留在那种水平,从人身上学到的东西远远比书多的多.解决了一个问题后,要去究根问底去找到问题产生的起因,以防你下次遇到类似的问题再浪费同样的时间.把代码写的漂亮,注释,空行,规范一样不能少,可读性是放在第一位.曾经看过一个高手写的代码,真的一看就是不同水平的人写的,几乎很完美,读起来很流畅,方便自己也方便别人.任务完后不要呆着,去要求经理给你更有挑战性的任务,只要你肯去尝试,他们就会对你另言相看,把三天的任务一天加班搞定,效率和忠诚都有了,路也比较好走了.4、题尾话如果你有一份思想,我有一份思想,拿出来交换,我们大家拥有就是2分份思想,可惜这种观念,并不能深入每一个团队的每一个人,少一点自私,未必不是好事.职场到处都存在被排挤的隐患,要为自己找片草地实在不容易.但有一点要相信,只要自。
hollis的java八股文

hollis的java八股文
摘要:
1.简介
2.Hollis的Java八股文概念
3.Java八股文的好处
4.如何学习Java八股文
5.总结
正文:
Hollis是一位知名的技术博主,他的Java八股文深受Java开发者们的喜爱。
那么,什么是Java八股文呢?
Hollis的Java八股文,实际上是指那些在Java编程中经常被用到、几乎成为了“常识”的知识点。
这些知识点包括但不限于:基本数据类型、控制语句、数组、字符串、面向对象编程、异常处理、集合框架、输入输出流、多线程、网络编程等。
这些知识点就像是传统的八股文,虽然有些枯燥,但是对于Java开发者来说,却是必备的基本功。
那么,学习Java八股文有什么好处呢?首先,掌握这些基础知识可以帮助开发者更好地理解Java语言的运行机制,提高编程效率。
其次,这些知识点是Java编程的基石,掌握了这些知识点,才能在实际开发中灵活运用Java语言的各种特性。
最后,对于想要参加Java相关考试或者面试的人来说,熟悉这些基础知识是非常重要的。
那么,如何学习Java八股文呢?Hollis建议,首先要对Java语言有一个
整体的认识,了解Java语言的基本概念和特点。
然后,通过阅读书籍、观看视频教程、参加线上线下的培训课程等方式,逐步掌握Java八股文中的各个知识点。
此外,多进行实际编程练习,将所学知识应用到实际项目中,也是提高编程能力的重要途径。
总之,Hollis的Java八股文为我们提供了一个很好的学习Java语言的方向。
写代码的常识

写代码的常识
一、C++
1、注意中英文切换下的符号
、“”中文下的引号和英文的不同,Shift的切换变得至关重要一般,这将会致使你在C++程序运行时报错。
注意观察报错在第几行,然后好好检查。
、“()”中英文格式下也会不同,每种代码所需的都要在英文下输入符号,一条代码里可能需要很多个括号,所以得认真核对。
、“{ }”是否打少了一个,打少了代码将无法运行。
、“;”代码中一条执行语句后该打“;”应注意哦,当然不需要的就不用画蛇添足了,例如:for()语句 if等
、一般代码中出现的中文或者中文格式下的符号,都为注释或者作为输出等;所以在敲代码时应多注意中英文下的符号,这样可以减少后期的对代码的检查;2、注意一条可执行代码的格式
、main();在C++一段可执行的程序中是不可缺少,并且不要写错了;
、例如:for(){ },for 里面的语句需要以;结尾,for()后面必须有{ },而{ }里必须有;结尾。
、if(){ },也是类似的for的,但if一般会有else ,而else后也是需要{ }的。
、int、char、double、float,这几个常见的定义类型。
二、C#
三、Java。
java总结与心得体会5篇

java总结与心得体会5篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如总结报告、演讲致辞、事迹材料、学习心得、合同协议、条据文书、自我鉴定、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays for everyone, such as summary reports, speeches, deeds, learning experiences, contract agreements, normative documents, self-evaluation, teaching materials, essay summaries, other sample essays, etc. If you want to learn about different sample essay formats and writing methods, please stay tuned!java总结与心得体会5篇心得是一种感受性文字,所以只有结合自身的实际经历才会写出有趣的文章,平日里相信大家一定经常使用到心得,本店铺今天就为您带来了java总结与心得体会5篇,相信一定会对你有所帮助。
java实验心得体会

java实验心得体会此次只实验了短短的三周。
虽说时间很短,但其中的每一天都使我收获很大、受益匪浅,它不但极大地加深了我对一些理论知识的理解,不仅使我在理论上对java有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用,更学到了许多做人的道理,对我来说受益非浅。
除此以外,我知道了什么叫团队,怎样和团队分工合作;同时我还学会了如何更好地与别人沟通,如何更好地去陈述自己的观点,如何说服别人认同自己的观点。
这也是第一次让我亲身感受到理论与实际的相结合,让我大开眼界。
也是对以前所学知识的一个初审吧!这次实验对于我以后学习、找工作也是受益菲浅的,在短短的三周中相信这些珍贵的经验会成为我今后成功的重要的基石;这对于我的学业,乃至我以后人生的影响无疑是极其深远的。
这次实验虽然是我们的第一次,不过同学们表现不错,由此看来,我们在进入大学的这几个月里学到了不少的专业知识,只是自己感觉不到而已。
对于所学专业,我们不能过于自卑和担忧,否则会阻碍自己学习。
实验是学习java的重要环节,有利于我们稳固专业知识、掌握工作技能,提高就业筹码。
我把本次为期三周的实验看作是“理论与实践相结合的桥梁”。
通过这周的实验和学习,我知道了此次实验的目的,也清晰目前自己的缺乏,那就是缺乏相应的知识与经验,对所学的专业知识不能够很好地运用于实践操作。
正所谓“百闻不如一见”,经过这次自身的切身实践,我才深切地理会到了“走出课堂,投身实践”的必要性。
平常,我们只能在课堂上与老师一起纸上谈兵,思维的认识基础上只是局限于课本的范围之内,也许就是这个原因就导致我们对专业知识认识的片面性,使得我们只知所以然,而不知其之所以然!限制了我们网络知识水平的提高。
但是课本上所学到的理论知识是为我们的实际操作指明了方向、提供相应的方法,真正的职业技巧是要我们从以后的实际工作中慢慢汲取的。
而针对实际操作中遇到的一些特殊的问题,我们不能拘泥于课本,不可纯粹地“以本为本”。
Java高级面试题整理(附答案)

String 作为数据类型,传输对象和中间人角色的重要性和流行性也使这个问题在 Java 面试中很常见。
A foo() /\ /\ foo() B C foo() \/ \/ D foo()
即使我们删除钻石的顶部 A 类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么 C++ 可以支持多重继承而 Java不行。嗯,在这种情况下,我会试着向他解释我下面给出的第二个原因,它不是因为技术难度, 而是更多的可维护 和更清晰的设计是驱动因素, 虽然这只能由 Java 言语设计师确认,我们只是推测。维基百科链接有一些很好的解释,说明在使用多重继
1)第一个原因是围绕钻石 形继承问题产生的歧义,考虑一个类 A 有 foo() 方法, 然后 B 和 C 派生自 A, 并且有自己的 foo() 实现,现在 D 类使 用多个继承派生自 B 和C,如果我们只引用 foo(), 编译器将无法决定它应该调用哪个 foo()。这也称为 Diamond 问题,因为这个继承方案的 结构类似于菱形,见下图:
为什么等待和通知需要从同步块或方法中调用, 以及 Java 中的 wait,sleep 和 yield 方法之间的差异,如果你还没有读过,你会觉得有趣。 为何 wait,notify 和 notifyAll 属于 Object 类? 为什么它们不应该在 Thread 类中? 以下是我认为有意义的一些想法:
2. 为什么 Java中不支持多重继承?
java学习的重难点有哪些

java学习的重难点有哪些首先是java开发环境的各种版本选择,这个过程是重点,必须要注意你所学习的图书或者视频使用的是哪个版本的JDK,依据自己〔电脑〕的系统选择对应的安装包,变量则是贯穿整个java〔编程〕开发的核心知识点。
1.JDK开发环境安装首先是java开发环境的各种版本选择,一般状况下我们必须要从JDK官网下载最新版本的JDK文件(但是还必须要注意你所学习的图书或者视频使用的是哪个版本的JDK),依据自己电脑的系统选择对应的安装包。
其次在安装过程中一定要设置环境变量的路径,这个过程非常关键,会直接影响你的JDK是否可以正常使用。
最终还要在“命令提示符〞中验证,是否已经真正地完成了JDK的安装。
2.变量的理解变量是入门java开发的第一个概念性的思维转变,目前所有的编程语言都是完成人类语言到机器语言的转变过渡方式。
变量则是贯穿整个java编程开发的核心知识点。
例如变量的各种不同的类型、变量的命名规则、变量之间的转换、变量赋值时的初始化的理解,变量的相关运算符的使用等等。
3.OOP面向对象编程思想java作为高级编程语言,特点就是采纳面向对象编程思想,与面向过程的编程方法相比,OOP能够大幅度的提升代码运行效率。
在面向对象中必须要重点理解类、对象、抽象类、接口、封装、集成和多态的概念。
2 java学习技巧有哪些1.教程学习首要去找一个java的根底教程学一下,或许你也能够去找相应的视频。
学习java根底的时分,应该尽量多着手,许多时分,你想当然的作业,等你写出来作业一下,你就会发现不是这么回事儿,不信你就试试。
学完以上内容往后,你应该对java有一个根本的了解了,你能够用java言语写出一些简略的程序,并且你用的是最简略的编辑器,比方记事本。
这个时分,不要急于进入下一部分,留下几天好好写一些程序,尽可能了解这些根底内容。
2.根柢技术学习等你写上几天程序往后,你往往会比较苍莽,由于你写的东西好像看起来毫无用处,比方完毕一个简略的计算器,读取一个文件等。
bigdecimal类型的值序列化时被转换成了科学计数法-概念解析以及定义

bigdecimal类型的值序列化时被转换成了科学计数法-概述说明以及解释1.引言1.1 概述:在现代计算机编程中,精确计算和处理大量小数值非常常见。
为了满足这种需求,许多编程语言提供了`BigDecimal`类型,它能够实现高精度的小数计算和存储。
然而,在进行`BigDecimal`类型的值序列化时,经常会遇到一个问题:它们会被转换成科学计数法的形式。
科学计数法是用于表示非常大或非常小的数字的一种方法,它使用指数形式来表示数字。
这种转换可能会导致一些困惑和不准确的结果。
因此,理解`BigDecimal`类型的序列化问题以及科学计数法对值的影响是非常重要的。
本文将探讨`BigDecimal`类型的定义和特点,分析`BigDecimal`类型的值序列化问题,并讨论科学计数法对`BigDecimal`值的影响。
最后,我们将总结`BigDecimal`类型的序列化问题,探讨解决方法,并对科学计数法进行进一步的理解与应用。
通过本文的阅读,读者将能够更好地理解`BigDecimal`类型的序列化问题,掌握解决方法并合理应用科学计数法,从而提高计算机编程的精确度和准确性。
1.2文章结构文章结构是为了确保文章逻辑清晰、层次分明,并使读者容易理解文章的组织和内容安排。
本文1.2节主要介绍文章结构的安排和组织。
1.2 文章结构在本文中,为了全面深入地探讨Bigdecimal类型值序列化时转换为科学计数法的问题,我们将文章分为三个主要部分:引言、正文和结论。
这三个部分共同构成了本文的框架。
引言部分(Chapter 1)主要对本文的研究背景和目的进行了概述。
我们介绍了Bigdecimal类型值序列化问题的重要性以及科学计数法对值的影响。
此外,我们还简要解释了文章的结构和目的,为读者提供了一个整体的了解。
正文部分(Chapter 2)则是本文的核心内容,有以下三个子部分:2.1 Bigdecimal类型的定义和特点在本节中,我们将对Bigdecimal类型进行定义和特点的介绍。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java的类一些常识“1、请解释Java语言的跨平台特性。
解析:虽然不知道什么是跨平台也可以使用Java语言进行编程,但是对于一个Java编程员来说,理解跨平台特性能够更深入掌握Java语言,所以企业中往往要求应聘者至少理解这个特性。
参考答案:Java的跨平台特性也被称为可移植性、平台无关性,或者一次编写处处运行。
他的意思就是如果用Java语言编写一个应用,那么就可以在不同平台上运行,而不需要为不同平台单独运行开发。
之所以能实现跨平台的特性。
主要得益于Java虚拟机(JVM),JVM解释器在运行Java应用时根据当前平台进行解释,解释成符合当前平台规范的机器码,所以可以实现同样的应用在不同平台上都能运行。
“2、请列举JAVA语言的主要特点解析:了解一门语言,往往从熟悉该语言的主要特点开始入手,所以企业也常常通过应聘者对JAVA语言特点的掌握程度而判断其语言基础是否扎实。
参考答案:JAVA语言有很多特点,主要包括:①跨平台性:一个应用可以不经过修改直接运行到不同的平台上。
②面向对象:JAVA语言是一门面向对面的语言,可以使用对象的属性和行为,可以使用面向对象的思想进行分析设计,并实现整个应用。
③解释执行JAVA应用时,JVM中的解释器将解释类文件,生成符合当前平台的字节码。
④自动回收:JAVA 应用中的垃圾回收是自动进行的,JVM中的后台线程将监视内存中数据的使用,当内存中的数据不再被引用时,将被作为垃圾回收,而不需要程序员动手回收。
“3、请说明一个JAVA类中主要包含哪几个元素?并说明每种元素的作用。
解析:无论简单还是复杂的JAVA应用,都是由若干个类组成,所以类是JAVA应用的组成单位。
了解一个类中包含的主要元素能够对类有一个清晰的认识。
一个类中往往会有五种元素,即属性、方法、构造方法、块以及内部类、其实块和内部类比较少见。
参考答案:JAVA类中主要包含属性、方法、构造方法、块以及内部类。
属性用来定义对象的数据;方法用来定义对象的行为;构造方法可以用来创建对象;块能够用来在类加载时执行操作或者在每次实例化前执行通用操作;内部类作为类的一个成员存在,能够访问外部类的属性和方法。
“4、请说明构造方法的作用和特征解析:类是对象的模板,使用类往往都需要首先对类进行实例化,即创建对象。
要创建对象必须使用new关键字调用构造方法(constructor)才能完成,构造方法中往往对属性进行实例化,也可以实现其他必要的功能,如读取属性文件等。
构造方法有独特的特征:名字必须与类名相同且大小写敏感,而且构造方法不能声明返回值,这两个特征缺一不可。
使用Eclipse工具时,可以使用菜单Generate Constructor自动生成不同的构造方法。
参考答案:构造方法的作用是用来创建对象,使用new关键字调用。
构造方法的名字必须与类的名字相同,并且大小写敏感,同时构造方法不能声明返回值类型,可以使用任意一种访问修饰符,但是不能使用其他修饰符进行修饰,如static、final、abstract等修饰符都可以修饰构造方法。
“5、什么是方法重载(overload)?解析:如果一个类的某个行为,会有不同的算法和逻辑,例如,Math类的计算绝对值的方法,既可以计算int类型数值的绝对值,也可以计算double类型数值的绝对值。
这种情况下,每种类型都定义一个不同的方法名,如abInt、absDouble,那么类的可读性就较差,使用时,必须熟悉处理每种类型参数所对应的方法名。
然而,如果使用同一个方法名,而使用不同的形式参数来区别这些方法,那么就具有很好的可读性,如abs(int i)、abs(double d)等。
可读性强的代码是企业对开发人员的基本要求,方法重载能够使得代码有很好的可读性。
参考答案:方法重载指的是在一个类中可以声明多个相同名字的方法,而方法的形式参数有区别。
调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。
“6、请列举Java语言中的权限访问修饰符,并说明每种权限的含义。
解析:正确使用权限访问修饰符,能够有效控制类以及类成员的安全性,Java语言中有四种访问修饰符,包括public、同包、protected以及private,一般情况下,应用中的类多是public权限,属性多是private权限,方法多是public权限。
参考答案:Java语言中有四种权限访问修饰符,即public、protected、同包以及private,public表示公共权限,即任何包中都可以访问:protected表示受保护权限,即同包中可以访问,同包中的子类可以访问:同包权限是默认权限,即不显示指明权限修饰符的时候就是同包权限,表示只有同包中可以访问:private是私有权限,表示只能在本类中访问。
“7、请列举Java语言中的八种基本数据类型,并说明每种数据类型的含义及长度。
解析:数据类型在任何一门编程语言中都是很重要的知识点,属性、方法参数、方法返回值要指定各自的数据类型。
Java语言虽然是一门面向对象的语言。
但是也定义了基本数据类型,基本数据类型可以直接赋值,不需要使用new关键字创建,可以直接使用运算符进行运算,编程中经常被使用,而且Java语言中的基本数据类型的长度固定,不会随着平台的不同而不同。
参考答案:Java语言的八种基本数据类型有:byte字节型,8位长度:short短整型,16位长度,int整型,32位长度:long长整型,64位长度:float单精度浮点型。
32位长度:double双精度浮点型,64位长度:char字符型,16位长度:boolean型,表示逻辑值,有true和false 两个值,分别表示真和假“8、什么叫引用类型,引用类型和基本数据类型有什么区别?解析:很多初级程序员都能够理解int i=20;中的int是一种类型,称为整型。
而对于类似Employee e=new Employee();这样表达式中的Employee却感觉无所适从。
其实,任何一个类都是一种类型,如Employee就是一种类型,可以说变量e的类型就是Employee。
Java语言中将类的类型称为引用类型,即reference type。
可以说,除了八种基本数据类型之外的类型都是引用类型,包括API中所有的类、自定义的所有类,也包括数组。
引用类型和基本数据类型的直观区别就是引用类型的变量需要使用new调用构造方法来赋值,而基本数据类型可以直接使用“=”号赋值。
但是,引用类型中的String比较特殊,既可以使用new关键字赋值,也可以直接使用“=”赋值,一般情况下都使用“=”直接赋值。
参考答案:Java语言中除了基本数据类型之外的类型,都称为引用类型。
引用类型就是类的类型,所有的对象都是引用类型,包括数组对象。
引用类型必须使用new调用构造方法进行赋值,引用类型的变量拥有自己的属性和方法,可以使用圆点调用自己的属性和方法。
基本数据类型直接使用=号进行赋值,且没有自己的属性和方法,往往都在声明属性或方法时使用。
“9、对于String对象,可以使用“=”赋值,也可以使用new关键字赋值,两种方式有什么区别?解析:String类型是实际工作中经常使用到的类型,从数据类型上划分,String是一个引用类型,是API中定义的一个类。
所以String类型的对象可以使用new创建,例如String name=new String(“ETC”);为变量name进行赋值,值为“ETC”。
然而,String类比起其他类有些特殊,可以使用“=”直接赋值,如String name=“ETC”,也是为变量name进行赋值,值为“ETC”。
这两种赋值方式是有差别的,使用new赋值,永远都是创建一个新对象,在新的内存空间初始化了字符串的值;而使用“=”赋值,不会每次都初始化新的字符串,而是从一个“字符串实例池”中去查找有没有要赋值的字符串,如有则直接引用;如不存在,则初始化一个字符串,并放入“字符串实例池”。
在实际编程中,往往使用“=”好对String 类型变量进行赋值。
参考答案:使用“=”赋值不一定每次都创建一个新的字符串,而是从“字符串实例池”中查找字符串。
使用new进行赋值,则每次都创建一个新的字符串。
“10、String类是一个“不可变类”,请解释“不可变类”的含义。
解析:String类是一个不可变类,即immutable类。
所谓不可变,意思是当一个字符串被初始化后,它的值就不会被改变。
例如,Strings=new String(“hello”)为将初始化一个值为hello的字符串,如果调用 s.toUpperCase()看起来是把hello变为大写的HELLO,然而事实上并不会把已有的hello变为HELLO,而是在新的空间初始化一个HELLO字符串。
也正因为有这种不可变性,所以才能支持“字符串实例池”的使用。
参考答案:所谓的不可变类,就是当字符串初始化后,就不能够被改变。
“11、String类和StringBuffer类有什么区别?解析:String类是不可变类,字符串一旦初始化后,就不能被改变。
而StringBuffer类是可变类,字符串值可以呗改变。
常常在实际应用中看到累死这样的代码:String s=new(“hello”);s+=”world”,这两句代码首先创建一个字符hello,然后将world追加到hello结尾并重新赋值给变量s。
然后,这个过程实际上是这样的:首先创建一个StringBuffer对象,然后用StringBuffer类的append方法追加字符串,最后对StringBuffer对象调用toString方法合成字符串返回。
可见,使用+号连接字符串时,本质上是使用了可变的StringBuffer类,经变动肯定性能效率受到影响,所以建议需要追加字符串时,可以考虑直接使用StringBuffer类。
参考答案:String类是不可变类,即字符串值一旦初始化后就不可能改变。
StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。
“12、StringBuffer和StringBuilder类有什么区别?解析: StringBuffer是JDK5中增加的一个新类,在以前版本中不存在这个类。
StringBuilder中的方法和StringBuffer中的方法基本相同,但是StringBuffer是线程安全的,而StringBuilder不是线程安全的,因此在不考虑同步的情况下,StringBuilder有更好的性能。
参考答案:StringBuffer是线程安全的字符串缓冲,而StringBuilder 不是线程安全的。
“13、包装器类型包括哪些类,有什么作用?解析:初级程序员常常对float和Float或者double和Double感到混淆。