欢迎访问我的博客,同步更新: 枫山别院
基于Java 8
类型是什么,从哪里来的
从这节开始,我们就正式进入编程语言的学习了。
我先提个问题考一下大家:
1 + 1 = ?
这个非常简单,在计算正确的情况下,不出意外应该是等于2
.幼儿园的小朋友在没看过那个小品的情况下,基本都能算对。
那么,请问:
A + B = ?
也许是AB?
或者BA?
或者123
吗?
可以说,没有人知道等于什么。英文字母不能做加法计算,所以没有结果,这是常识。
人类世界的常识在计算机世界也是有效的。人类都不知道等于什么,计算机这个榆木脑袋更不可能知道了。
不同的东西运算规则不一样,为了区分什么样的内容能做运算,我们就有了类型这个概念。
123
,321
,这种,我们叫做数字的,可以做加减乘除等各种数学运算。
A,B,C
,这种的,是字母,不能做加减乘除等数学运算。
我们人类的数字,在计算机中,叫做整数类型,简称整型。
小数类型对于计算机来说,比123
这种整型要复杂一点,所以它有个单独的类型,叫做浮点类型。在有的编程语言中也不区分,整数和小数是同一种类型,但是Java是一种严谨的语言,它是区分的。
浮点这个名字很奇怪,词不达意。这是因为外国人先发明了计算机,他们有了优先命名权,这些奇怪的词语都是直接从英文翻译过来的,我们觉得不能理解很正常的,只要知道它表示小数就可以了,不用深究,这种词语还有很多。
那么字母这些,也有一个类型,叫做字符类型。这个好理解吧?
现在我们有了理论支持,我们就知道了,什么能计算,什么不能计算。
我们给计算机定义好了这些规则,计算机就可以按照规则,计算我们给出的算式。
实践一下整型计算
我们在网页中打开运行代码的网站,我们以后以w3cschool这个网站为例。
打开之后,可以在黑框中看到如下代码:
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
有很多内容,我们目前还没有学习,没有关系,学习的初级阶段就是照猫画虎。
其实我们关注的重点就是这一句代码而已:
System.out.println("Hello, World!");
这句代码的意思就是,把Hello, World!
显示在屏幕上。
那么我现在想让计算机帮我计算一下1+1
这个难题。应该如何写呢?
其他的地方不要动,我们修改下括号里面的内容,照猫画虎如下:
System.out.println(1 + 1);
请大家注意:必须一个字不差的跟上面一样,因为计算机是个榆木脑袋,任何一次字母或者符号错了,它就不认识了。
1 + 1
这个算式,为了美观,我在+号的两边添加了空格,当然你也可以这么写 1+1
写完之后,点击运行代码,看看结果是什么。
结果是2,如果你跟我一样,那么你的第一个程序就运行成功了,恭喜。
你可以改成其他的试试,比如123 + 321
或者 321 - 100
看看计算结果对不对。
字符类型
在上面我们已经试过整型的计算了。
那么,字符如何操作呢?
我们讨论过了,字符是跟数字不一样的类型,计算机这个榆木脑袋,是区分不出来A 和 1的明显差别的,如果你直接写一个A给计算机,它会报告一个错误给你,不认识A这个符号。。。。。。
唔。。。。。。这是个问题,假如你是当年发明计算机的科学家,你如何解决呢?
最好是跟数字的书写方法不一样,计算机就能认识了。
于是,他们发明了字符的书写方法。很简单,用单引号来包裹住字符就可以了。
像这样:
'A'
这么写,计算机就能认识了,哦。。用单引号来裹住的,是个字符。
实践一下字符类型
同样的,我们在网页中修改代码,照猫画虎如下:
System.out.println('A');
然后运行一下代码看看,如果你看到显示了A,那么就是成功了。计算机认识我们输入的A,并且给我们显示了出来。
如果你的没有成功显示A,那么检查一下是否跟上面一样。
初学者常犯的错误就是,忘记了区分中文和英文的逗号引号分号。因为计算机是外国人发明的,所以他们都是用的英文的符号,不是中文的。
逗号和引号在中文输入法和英文输入法中,是不一样的。
我在上面用的单引号是'
,而不是中文的单引号’
,这两个符号是有细微区别的,中文的有一点倾斜。
英文的逗号是,
中文的逗号是,
这两个比较难区分,中文的要精致一些,英文的就是个小撇。
英文的分号是;
,中文的分号是;
,也不太一样,中文的要小一些。
所以在写代码的时候,我们都是直接切换到英文输入法。
目前在没有在专用的编辑器中写代码,只能靠大家自己的眼力了,后面我们会使用专业的编辑器,它们可以提示我们符号写错了。
如果你实在分不清单引号,那也没有关系,字符类型其实我们平时用的很少。但是逗号和分号是用的很多的。
多个字符
单个字符的我们已经学会了,单引号表示。我现在不想用字符了,我要写单词,我要写个Love
。
应该怎么表示?
是'Love'
这样写吗?
这种写法在有些编程语言中是可以的,但是!Java是个严谨的编程语言,单个字符跟多个字符还是有差别的嘛。
那么,多个字符就用双引号好了,顺理成章吧?
多个字符组成一个串,名字就叫字符串好了。我们就有了字符串类型,用来表示多个字符。
像这样:
"Love"
同样的道理,我想显示一句话:I Love You !
就这样:
"I Love You !"
我们已经跟计算机约定好,双引号包裹住的内容,是文字内容,我们可以写一句话,或者一封表白信。
但是也有个问题,左右两个双引号只能在同一行,计算机才能认为两个双引号是一对的,真是有点榆木脑袋。
像这样是不行的:
"I Love
You !"
这样就是左右两个双引号不在同一行中,计算机会不认识。
实践一下字符串类型
像这样照猫画虎改一下:
System.out.println("I Love You !");
运行一下,是不是显示出来了呢?
如果没有,再检查一下是否一样,有没有忘了使用英文的引号。
显示中文也是可以的
System.out.println("我爱你!");
我们似乎还忘了一种简单的计算
小学课程里,除了加减乘除,好像还有大于和小于的比较。
如果我在代码里输入如下的代码,会显示什么呢?
System.out.println(3 > 2);
3 > 2
,说了一句大实话。请执行一下看看。
我的计算机告诉我,结果是true
。如果你跟我一样,那么我们就发现了一个新大陆。
那么如果是这样呢?
System.out.println(3 < 2);
这时候计算机告诉我,结果是false
。
我们知道,在英文中,true
的意思是符合事实的,真实的,真的。 false
的意思是假的,错误的。
那么,我们在计算3 > 2
的时候,计算机其实是想告诉我们,这是真的,正确的。3 < 2
的时候,告诉我们,这是错误的,假的。
看来,计算机还能做一些比较大小的计算,可以告诉我们结果是不是正确的。如果是正确的,就告诉我们true
,错误的就告诉我们false
。
那么,我们推断,肯定计算机是认识true
和false
两个词的。
是的,这两个词也是对应一个类型的,叫做布尔类型,英文是boolean
。这个类型仅有这两个值,对计算机来说,不是对的,就是错的,它是榆木脑袋,理解不了其他的。又是一个奇怪的名字,不要深究,因为我干了这么多年,到现在也不知道为什么,只知道是英文翻译来的。
实验
之前我们在上面说,A和B是不能相加的,除非我们约定一种计算规则。
请自己尝试一下,我们是否跟计算机有关于字符相加的约定规则,计算结果是什么呢?
System.out.println('A' + 'B');
如果是小写的a和b呢?
System.out.println('a' + 'b');
再如果是字符串呢?能相加吗?
试一试看:
System.out.println("hello" + "Java");
如果是减法呢?
System.out.println('A' - 'B');
如果我们比较两个字母的大小呢?
System.out.println('A' > 'B');
请大家尝试一下。