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中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.
随机推荐
- cocos2d-x学习记录1——图片显示
这篇算是cocos2d-x入门篇,显示一张图片即可. 观察工程中HelloWorld的结构,包含AppDelegate和HelloWorldScene两个类文件,AppDelegate中包含基本的处理 ...
- [CERC2017]Intrinsic Interval[scc+线段树优化建图]
题意 给定一个长度为 \(n\) 的排列,有 \(q\) 次询问,每次询问一个区间 \([l,r]\) ,找到最小的包含 \([l,r]\) 的区间,满足这个区间包含了一段连续的数字. \(n\leq ...
- Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...
- MySQL在x64系统上1067问题解决
最近一个项目需要用到MYSQL,因为以前也弄过,所以就没怎么多想,直接下一个完事了.于是乎果断上官方网站下了一个installer(5.26),修改了一下默认位置和配置,然后一路next,最后在配置完 ...
- java Script复习总结
一:基础知识 1.JavaScript语言的历史 l 早期名称:livescript l 开发公司:网景公司(netscape) 2.JavaScript语言的基本特点 l 基于对象 l 事件 ...
- c语言数字图像处理(一):bmp图片格式及灰度图片转换
本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...
- Unity攻击敌人时产生泛白效果
Shader的代码如下,主要是将透明度为1的像素点输出为白色,其中_BeAttack表示角色被攻击的泛白状态 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_M ...
- 基于tensorflow 1.x 的检索机器人chatbot-retrieval
Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...
- 【SE】Week3 : 四则运算式生成评分工具Extension&Release Version(结对项目)
Foreword 此次的结对项目终于告一段落,除了本身对软件开发的整体流程有了更深刻的了解外,更深刻的认识应该是结对编程对这一过程的促进作用. 在此想形式性但真心地啰嗦几句,十分感谢能端同学能够不厌其 ...
- Linux用户管理机制
Linux系统中的用户管理涉及用户账号文件 /etc/passwd.用户密码文件 /etc/shadow.用户组文件 /etc/group. 一.用户账号文件 /etc/passwd 该文件为纯文本文 ...