数据类型-Java基础一-初学者笔记
1.Java中的两种类型
在java源代码中,每个变量都必须声明一种类型(type)。
有两种类型:primitive type和reference type。引用类型引用对象(reference to object),基本类型直接包含值(directly contain value)。
primitive types(基本类型)
包括boolean类型以及数值类型(numeric types)共8种。
numeric types又分为整型(integer types)和浮点型(floating-point type)。
整型有5种:byte short int long char(char本质上是一种特殊的int)。
浮点类型有:float和double。
reference to object(引用类型饮用对象)
包括四种
- class type类类型;
- interface type接口类型;
- array type数组类型;
- null type;
Java是强类型语言,所有的变量必须先声明后使用,定义变量需要显示的声明一个在编译时就能确定的类型。
Java中的数据类型有两种,基本类型(Primitive Type)和引用类型(Reference Type)。
2.基本数据类型
Java提供了八种基本数据类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
一般把基本类型分为4类,如下表:
| 分类 | 类型 | 长度 |
|---|---|---|
| 整数型 | int | 32位 |
| --- | long | 64位 |
| --- | short | 16位 |
| --- | byte | 8位 |
| 字符型 | char | 16位 |
| 浮点型 | double | 64位 |
| --- | float | 32位 |
| 布尔型 | boolean | 1位 |
整型:
int为最常用的整型变量。系统中的整数常量会被看作int处理。但有以下两个例外:
- 如果一个整数很小(在byte或short)的范围内,当这个整数常量被付给一个byte或short变量时,整数常量会被当作byte或short类型。
- 如果一个巨大的整数常量(超出了Int的存储范围)时,系统不会把这个整数当作long类型处理,除非用户在常量后加上一个字母"L"。
示例:
1. publicclass IntegerValTest{
2. publicstaticvoidmain(String\[\]args){
3. //下面代码是正确的,系统会自动把56当成byte类型处理
4. bytea=56;
5. /*
6. 下面代码是错的,系统不会把9999999999999当成long类型处理,
7. 所以超出int的表数范围,从而引起错误
8. */
9. //longbigValue=9999999999999;
10. //下面代码是正确的,在巨大的整数常量后使用L后缀,强制使用long类型
11. longbigValue2=9223372036854775807L;
13. //以0开头的整数常量是8进制的整数
14. intoctalValue=013;
15. System.out.println(octalValue);
16. //以0x或0X开头的整数常量是16进制的整数
17. inthexValue1=0x13;
18. inthexValue2=0XaF;
21. System.out.println(hexValue1);
22. System.out.println(hexValue2);
25. //定义二个8位的二进制数
26. intbinVal1=0b11010100;
27. bytebinVal2=0b01101001;
28. //定义一个32位的二进制数,最高位是符号位。
29. intbinVal3=0B10000000000000000000000000000011;
30. System.out.println(binVal1);//输出212
31. System.out.println(binVal2);//输出105
32. System.out.println(binVal3);//输出-2147483645
33. /*
34. 定义一个8位的二进制,该数值默认占32位,因此它是一个正数。
35. 只是强制类型转换成byte时产生了溢出,最终导致binVal4变成了-23
36. */
37. bytebinVal4=(byte)0b11101001;
38. /*
39. 定义一个32位的二进制数,最好位是符号位。
40. 但由于数值后添加了L后缀,因此该整数的实际占64位,第32位的1不是符号位。
41. 因此binVal5的值等于2的31次方+2+1
42. */
43. longbinVal5=0B10000000000000000000000000000011L;
44. System.out.println(binVal4);//输出-23
45. System.out.println(binVal5);//输出2147483651
46. }
47. }
字符型
字符型用于表示耽搁的字符。字符常量通常用单引号(')括起来。Java使用unicode编码方式,所以字符型变量能够表示大部分国家的文字字符。
字符表示有以下几种方式:
- 直接使用字符常量:如 ‘a’、'我'等。
- 使用转移字符:如'\n'、'\t'等。
- 使用unicode表示字符:如'\uxxxx',其中x表示一个十六进制整数。
如果把一个整数(0~65535之间)常量赋给字符类型变量,系统会把整数当作char处理。
示例:
1. publicclassCharTest{
2. publicstaticvoidmain(String\[\]args){
3. //直接指定单个字符作为字符常量
4. charaChar='a';
5. //使用转义字符来作为字符常量
6. charenterChar='\\r';
7. //使用Unicode编码值来指定字符常量
8. charch='\\u9999';
9. //将输出一个'香'字符
10. System.out.println(ch);
11. //定义一个'疯'字符常量
12. charzhong='疯';
13. //直接将一个char变量当成int类型变量使用
14. intzhongValue=zhong;
15. System.out.println(zhongValue);
16. //直接把一个0~65535范围内的int整数赋给一个char变量
17. charc=97;
18. System.out.println(c);
19. }
20. }
浮点型
Java中浮点型有两种:double和float,两个浮点型的长度分别为64位和32位,且长度不因环境的改变而改变。浮点数的特点是不能够精确的表示一个小数位数较多的小数。
浮点数有两种表示方式:
- 十进制表示:3.11、5.2、4等
- 科学计数法表示:4.12E3、5.12E2;
java中一个浮点数常量默认为double类型,如果要系统把一个小数常量当作float处理,需要在小数后加上f字母。
示例:
1. publicclassFloatTest{
2. publicstaticvoidmain(String\[\]args){
3. floataf=5.2345556f;
4. //下面将看到af的值已经发生了改变
5. System.out.println(af);
6. doublea=0.0;
7. doublec=Double.NEGATIVE_INFINITY;
8. floatd=Float.NEGATIVE_INFINITY;
9. //看到float和double的负无穷大是相等的。
10. System.out.println(c==d);
11. //0.0除以0.0将出现非数
12. System.out.println(a/a);
13. //两个非数之间是不相等的
14. System.out.println(a/a==Float.NaN);
15. //所有正无穷大都是相等的
16. System.out.println(6.0/0==555.0/0);
17. //负数除以0.0得到负无穷大
18. System.out.println(-8/a);
19. //下面代码将抛出除以0的异常
20. //System.out.println(0/0);
21. }
22. }
布尔型
布尔型只有一个boolean类型,用于表示逻辑真或者逻辑假。boolean的值只能为true或者是false,其他基本类型不能转换到boolean类型。
示例:
1. publicclassBooleanTest{
2. publicstaticvoidmain(String\[\]args){
3. booleanb1=true;
4. booleanb2=false;
5. //下面代码将出现错误:字符串不能直接变成boolean型的值
6. //booleanb3="true";
7. //使用boolean和字符串进行连接运算,boolean会自动转换成字符串
8. Stringstr=true+"";
9. //下面将输出true
10. System.out.println(str);
11. }
12. }
3.基本类型之间的转换
Java中基本类型有两种转换方式自动转换和强制转换。讲一个表数范围小的变量赋给一个表数范围大的变量,系统将进行自动转换,将小便量转换为大变量在进行赋值操作。
示例:
1. publicclassAutoPromote{
2. publicstaticvoidmain(String\[\]args){
3. //定义一个short类型变量
4. shortsValue=5;
5. //下面代码将出错:表达式中的sValue将自动提升到int类型,
6. //则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。
7. //sValue=sValue-2;
8. byteb=40;
9. charc='a';
10. inti=23;
11. doubled=.314;
12. //右边表达式中在最高等级操作数为d(double型)
13. //则右边表达式的类型为double型,故赋给一个double型变量
14. doubleresult=b+c+i*d;
15. //将输出144.222
16. System.out.println(result);
17. intval=3;
18. //右边表达式中2个操作数都是int,故右边表达式的类型为int
19. //因此,虽然23/3不能除尽,依然得到一个int整数
20. intintResult=23/val;
21. //将输出7
22. System.out.println(intResult);
23. //输出字符串Hello!a7
24. System.out.println("Hello!"+'a'+7);
25. //输出字符串104Hello!
26. System.out.println('a'+7+"Hello!");
29. }
30. }
如果系统把大范围变量转换为小范围变量就需要强制转换,强制转换的语法格式是(type)value,可将valae强制转换为type类型的变量。当强制转换可能会导致数据精度的丢失,请看示例:
1. publicclassNarrowConversion{
2. publicstaticvoidmain(String\[\]args){
3. intiValue=233;
4. //强制把一个int类型的值转换为byte类型的值
5. bytebValue=(byte)iValue;
6. //将输出-23
7. System.out.println(bValue);
8. doubledValue=3.98;
9. //强制把一个double类型的值转换为int
10. inttol=(int)dValue;
11. //将输出3
12. System.out.println(tol);
13. }
14. }
4.表达式类型的自动提升
当一个算术表达式中包含多个基本类型时,整个表达式的类型会发生自动提升,Java定义了如下的提升规则:
- 所有的byte类型,short类型和char经提升到int类型。
- 怎个算术表达式的数据类型提升到最高等级操作时的类型。
示例:
1. publicclassAutoPromote{
2. publicstaticvoidmain(String\[\]args){
3. //定义一个short类型变量
4. shortsValue=5;
5. //下面代码将出错:表达式中的sValue将自动提升到int类型,
6. //则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。
7. //sValue=sValue-2;
8. byteb=40;
9. charc='a';
10. inti=23;
11. doubled=.314;
12. //右边表达式中在最高等级操作数为d(double型)
13. //则右边表达式的类型为double型,故赋给一个double型变量
14. doubleresult=b+c+i*d;
15. //将输出144.222
16. System.out.println(result);
17. intval=3;
18. //右边表达式中2个操作数都是int,故右边表达式的类型为int
19. //因此,虽然23/3不能除尽,依然得到一个int整数
20. intintResult=23/val;
21. //将输出7
22. System.out.println(intResult);
23. //输出字符串Hello!a7
24. System.out.println("Hello!"+'a'+7);
25. //输出字符串104Hello!
26. System.out.println('a'+7+"Hello!");
27. }
28. }
5.Java中的引用数据类型
- 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时候被指定为一个特定的类型,声明之后不能改变。
- 引用数据类型包括:类(对象)、接口、数组。
- 所有引用类型默认值都是null.
- 一个引用变量可以用于引用任何与之兼容的类型。
数据类型-Java基础一-初学者笔记的更多相关文章
- Java基础学习心得笔记
对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变.面向过程就是把你的代码封装成函数,然后依次去做一件事情,面向过程是把你要做 ...
- java基础知识学习笔记
本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...
- Java基础学习总结笔记
Java基础 Java常用内存区域 栈内存空间:存储引用堆内存空间的地址 堆内存空间:保存每个对象的具体属性内容 全局数据区:保存static类型的属性 全局代码区:保存所有的方法定义 修饰符 权限修 ...
- Java基础知识点总结笔记
面向对象的三大特性 继承:一般只能单继承,内部类实现多继承,接口可以多继承 封装:访问权限控制public>protected>包>private内部类也是一种封装 多态:编译时多态 ...
- JAVA 基础加强学习笔记
一.面向对象 (一)继承 1.继承的好处: (1) 提高了代码的复用性. (2) 让类与类之间产生了关系,提供了另一个特征多态的前提. 注意: 子类中所有的构造函数都会默认访问父类中的空参数的构造函 ...
- Java基础加强学习笔记(二)
一.反射的基础Class类 1.如何得到各个字节码对应的实例对象 (1)类名.class,例如 System.class (2)对象.getClass(),例如 new Data().getClass ...
- Java基础小知识笔记
1. Integer转进制的一个类2. toBinaryString,toOctalString,toHexString.(转为二进制,八进制,十六进制的方法)3. 如果·数据的大小没有超过byte/ ...
- java基础(个人学习笔记) A
1. 声明long类型的变量 需要在数值的末尾+l/L.(不加L的话,貌似默认就是int型了.当给long赋值一个超过int范围的值的时候,会出问题.) 2. package java_ ...
- 异常处理——毕向东Java基础教程学习笔记
1.异常:就是程序运行过程中出现的不正常情况. 异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象. 其实 ...
随机推荐
- GO基础之闭包
一.闭包的理解 闭包是匿名函数与匿名函数所引用环境的组合.匿名函数有动态创建的特性,该特性使得匿名函数不用通过参数传递的方式,就可以直接引用外部的变量. 这就类似于常规函数直接使用全局变量一样,个人理 ...
- zepto源码分析·ajax模块
准备知识 在看ajax实现的时候,如果对ajax技术知识不是很懂的话,可以参看下ajax基础,以便读分析时不会那么迷糊 全局ajax事件 默认$.ajaxSettings设置中的global为true ...
- 用Java JMC控制台分析线程阻塞原因
问题 今天在玩dianping-CAT框架时,发现请求某个页面的时候,发生了阻塞.浏览器得不到响应. 环境 本地Tomcat 8 , Windows 系统. 解决 启动jmc 控制台,找到BLOCKE ...
- 原版_打字游戏.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript随机生成布尔值
//方法一 var rand = Boolean(Math.round(Math.random())); conosole.log(rand) // 方法二: var arr = [true,fals ...
- 一起来刷《剑指Offer》——不修改数组找出重复的数字(思路及Python实现)
数组中重复的数字 在上一篇博客中<剑指Offer>-- 题目一:找出数组中重复的数字(Python多种方法实现)中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素. 然后我们 ...
- Python中使用字典的几个小技巧
1 解包 所谓解包,就是将字典通过 ** 操作符转为 Key=Value 的形式,这种形式可以直接传给函数作为关键字参数. 说说适用的几种情况. 1.1 搜索拼接条件 当应用中使用类似 SQLAlch ...
- Everything 信息泄露
google语法: inurl:Diagnostics/index 这个无意间看到别人找到的,其实是everything自带的http服务器功能开启了忘记关,算是管理员自己的疏忽 可以看到开了ever ...
- DP动态规划学习笔记
作为考察范围最广,考察次数最多的算法,当然要开一篇博客来复习啦. 子曰:温故而知新,可以为师矣 我复习DP时有一些自己对DP的理解,也就分享出来吧. ——正片开始—— 动态规划算法,即Dynamic ...
- strGame:博弈论,trie
挺有意思的一道题.初探博弈论. 最好自己思考? 我们先考虑只有1轮游戏的情况. 这题明显要在字符串上一位一位地走,所以对字符串建立起trie. 最终建立起的trie的叶节点就是必败位置了. 对于非叶节 ...