Java基础-Java数据类型
Java基础-Java数据类型
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.数据类型的作用
数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围,允许的操作。
二.数据类型的分类
Java中的数据分为基本类型与引用类型两大类:
1>.变量名所标识的存储空间和存储的内容就是变量的值,这是基本类型。
2>.变量名所标识的存储空间中存储的内容是另外一块存储空间的起始地址(引用),这是引用数据类型。
java中的基本类型又分为:整数类型,小数类型,字符类型,布尔类型。Java中引用类型又分为:类,接口,数组等。
三.基本数据
1>.整数类型
数据类型 |
所占字节数 |
取值范围 |
byte |
1 |
-128~127 |
short |
2 |
-32768~32767 |
int |
4 |
-2147483648~2147483647 |
long |
8 |
-263~263-1 |
a>.对于一个字节来说,用二进制表示它的取值范围:
1000 0000 (-128)
0111 1111 (127)
b>.对于四个字节int类型,用二进制表示取值范围
1000 0000 0000 0000 0000 0000 0000 0000 (-2147483648)
0111 1111 1111 1111 1111 1111 1111 1111 (2147483647)
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class IntDemo{
public static void main(String[] args){
//1>.整数字面量默认为int类型,我们这里定义一个int类型的变量。
int a = 100; //2>.定义一个byte类型的变量。
byte b = 20;
/**
给byte类型变量赋值时,如果这个整数字面量在byte类型的取值范围
之类可以赋值,如果给byte类型变量赋值的整数字面量超过了byte的取值
范围,则不可以赋值。 */
// b = 200; //"错误: 不兼容的类型: 从int转换到byte可能会有损失"。 //3>.byte/short/char这三种数据类型在进行运算之前,会先把字节提升为int再运算
System.out.println(b); // b = b + 1; //错误: 不兼容的类型: 从int转换到byte可能会有损失
/**
上面的“b = b + 1”想把b变量的值加上1之后,把和21再赋值给b变量。
在b变量加1之前,系统会自动把b提升为int类型再加1,b+1这个表达式为
int类型,不能直接赋值给byte类型变量。
*/ // b = a; //错误: 不兼容的类型: 从int转换到byte可能会有损失
/**
编译器在进行语法检查时,不管a变量的值是多少,编译器也看不到变量
的值是多少,编译器只认识a是int类型的变量,不能直接赋值给byte类型变量。
*/ b = 100 + 20;
System.out.println(b); //4>.short类型变量赋值也要在short的取值范围之内
short c = 456;
// c = c + 1; //错误: 不兼容的类型: 从int转换到short可能会有损失.
c += 1; //其实这里系统做了一个隐藏的操作:c = (short)c + 1;和上面的还是有一定区别的。
System.out.println(c); //5>.long类型变量
long d = 123;
/**
整数字面量123是int类型,变量d是long类型,在把整数字面量赋值给long类型时隐含着一个
自动类型装换,就是把int类型的字面量转换为long类型。建议在给long类型变量赋值时,在整数
字面量后面加上字符L(l)表示这个整数就是L类型。
*/ // d = 4147483647231; //错误: 过大的整数: 4147483647231.原因是这个字面量已经超过了int类型能保存的最大数值。
d = 4147483647231L; //省去了自动转换这一步。我们在后面加上L即可解决问题。
System.out.println(d); }
}
2>.小数类型
数据类型 |
所占字节数 |
精度 |
Float |
4 |
7 |
Double |
8 |
15 |
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class DecimalDome{
public static void main(String[] args){
//1>.小数字面量默认是double类型,定义一个double类型变量。
double a = 3.14; //2>.定义一个float类型变量,需要在小数后面加一个字符F(f)。
float b = 4.56F; //3>.float类型精度有7位
b = 456789.456789f;
System.out.println(b); //4>.小数在计算机中采用近似值保存,不准确。
b = 456789.987F;
System.out.println(b); System.out.println(2 - 1.1);
/**
一般情况下,小数不直接判断是否与另外一个小数相等,如果两个
小数相减,他们的差小于某个值是就认为这两个小数相等。
*/
}
}
3>.字符类型
char,占2个字节,采用Unicode编码。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class CharDemo{
public static void main(String[] args){
//1>.定义一个字符类型的变量
char s1 = 'A'; //2>.字符类型采用Unicode编码(utf-16格式),每个字符占两个字节,存储汉字
s1 = '尹';
System.out.println(s1); //3>.字符类型实际上存储的是这个字符对应的码值。
/*
s1 = 'A'
在s1变量中实际存储的是字符‘A’的码值是65
常见的码值有:
a>.‘A’: 65
b>.‘a’: 97
c>.‘0’: 48
d>.‘回车’ 13
e>.‘换行’ 10 */ //4>.因为字符存储的是码值,直接把一个整数赋值给字符类型变量。这个整数应该在0~65535之间,因为码值不存在负值。
s1 = 97;
System.out.println(s1); s1 = 'Y';
System.out.println(s1 + 1);
/**
上面一行是把 s1 + 1 这个表达式的值打印到屏幕上
先把s1变量的值89取出来,加上1的和90,打印到屏幕上
*/ //5>.char、byte、short在进行算术运算之前,先把自己提升为int类型。
// s1 = s1 + 1; //错误: 不兼容的类型: 从int转换到char可能会有损失 /**
6>.转移字符:
a>. \t tab,跳到下一个制表位,不是产生8个空格。
b>. \n 换行
c>. \\ \
d>. \' ’
e>. \" "
*/
System.out.println("abcdefg");
System.out.println("\"abcdefg\"");
//在Java中,遇到“\”就会默认为是转义字符的开始。
// System.out.println("abc\defg"); //这里的\d是:“错误: 非法转义符” }
}
4>.布尔类型
boolean,占1个字节,只有true和flase两个值。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class BoolDemo{
public static void main(String[] args){
boolean flag = true; System.out.println(flag); //boolean类型只有true/false;
// flag = 0; //错误: 不兼容的类型: int无法转换为boolean. System.out.println(flag);
}
}
四.基本类型转换
1>.基本数据类型转换
布尔类型不能和其它类型进行转换,整数,小数,字符类型可以相互转换。
2>.自动类型转换
3>.强制类型转换
不能进行自动类型转换时就可以进行强类型转换。格式:(目标类型)(表达式) 。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class AutoDome{
public static void main(String[] args){
//1>.自动类型转换
byte bb = 10; short ss = bb; int ii = ss;
ii = bb; long gg = ii;
gg = ss;
gg = bb; float ff = gg;
ff = ii;
ff = ss;
ff = bb; double dd = ff;
dd = gg; //2>.自动类型转换也可能丢失精度
ii = 2147456321;
ff = ii; //int可以自动转换float类型。
System.out.println(ff); //2.14745638E9 //3>.强制类型转换-小数转换为整数,舍弃小数部分
dd = 3.789123;
ii = (int)dd; //把double类型强制转换为int类型。
System.out.println(ii); //4>.强制类型转换-大的整数类型转换为小的之整数类型
ii = 270;
bb = (byte)ii;
System.out.println(bb);
/**
ii变量在计算机中的存储形式:
0000 0000 0000 0000 0000 0001 0000 1110
把ii强制转换为byte类型型,只把最后一个字节的数存储到bb变量中,bb变量中存储的内容为:
0000 1110
*/ //5>.强制类型转换-整数可以转字符
ii = 110;
char cc = (char)ii;
System.out.println(cc); //6>.强制类型转换-可以对表达式进行强制类型转换
bb = 123;
bb = (byte)(bb +1);
System.out.println(bb); }
}
五.基本数据类型与引用数据类型的区别
在Java中,基础数据类型的定义很简单,如:“int a = 18;”虽然就一行,其实是做了2步操作,第一,就是在内存中开辟了一块单独的内存空间,而这个变量对应的字面量就是这个内存空间所存储的值。也就是是说,当你修改“a”变量时,内存空间(或者说内存地址)并不发生改变,只是修改了内存变量所对应的字面量的值。
定义引用类型的变量也很简单,如:“String s = "hello world";”,从定义的格式上来看,跟基础数据类型定义方式如出一辙。但是在存储数据的时候却又很大的差异,引用数据类型定义之后,会在栈中存储一个内存地址,这个内存地址会对应到具体字面量的值。我们可以通过下面的图来记忆一下:
Java基础-Java数据类型的更多相关文章
- java基础(数据类型,运算符)
java基础之数据类型(变量) java中存在的数据有常量和变量 常量:在程序执行的过程中其值不可以发生改变 常量的分类 字面值常量 字面值常量的分类 常量 描述 字符串常量 用双引号括起来的内容 整 ...
- java基础-引用数据类型之二维数组(Array)
java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...
- java基础-引用数据类型之一维数组(Array)
java基础-引用数据类型之一维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的定义 1>.为什么需要数组 保存一个数据可以定义一个变量,如果要保 ...
- Java基础-引用数据类型之集合(Collection)
Java基础-引用数据类型之集合(Collection) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.
- Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)
Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...
- Java基础-Java中的并法库之线程池技术
Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.
随机推荐
- 深入浅出OAuth2.0授权
一.前言 说到OAuth,先来一段百度到的比较官方的解释: OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信 ...
- 架构师修练 I - 超级代码控
可实现的是架构,空谈是概念 So don't tell me the concepts show me the code! “不懂编码的架构师不是好架构师” 好架构师都是超级代码控. 代码是最好 ...
- kubernetes 集群新增node 节点并将应用分配到新增节点
第一章 1.重新安装一台kubernetes node节点,新增节点:192.168.1.192 网址:https://www.cnblogs.com/zoulixiang/p/9504324.htm ...
- 「功能笔记」Spacemacs+Evil备忘录
设置代理 (setq url-gateway-method 'socks) (setq socks-server '("Default server" "127.0.0. ...
- 转 Git 常用命令大全
一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch ...
- 11.7 Daily Scrum(周末暂停两天Daily Scrum)
由于APEC放假,有些成员离校了,他们那部分的任务会暂时拖后一些,之后会加班加点赶工. 另外,每个人的任务还是相对独立,离校成员的任务进度不会对其他成员的进度造成很大影响. Today's tas ...
- 《Linux内核分析》第一周学习笔记
<Linux内核分析>第一周学习笔记 计算机是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...
- Linux命令(十七) 关机命令
在 Linux 系统下一些常用的关机/重启命令有 shutdown.halt.reboot以及init,他们都可以达到重启系统的目的,但每个命令的内部工作过程不同. 一.使用 shutdown 关机或 ...
- PSP(4.13——4.19)以及周记录
1.PSP 4.13 15:15 15:30 0 15 站立会议 A Y min 15:30 19:00 65 145 Account A Y min 21:15 23:00 15 90 博客 B Y ...
- .NET获取文件的MIME类型(Content Type)
第一种:这种获取MIME类型(Content Type)的方法需要在.NET 4.5之后才能够支持,但是非常简单. 优点:方便快捷 缺点:只能在.NET 4.5之后使用 public FileResu ...