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数据类型的更多相关文章

  1. java基础(数据类型,运算符)

    java基础之数据类型(变量) java中存在的数据有常量和变量 常量:在程序执行的过程中其值不可以发生改变 常量的分类 字面值常量 字面值常量的分类 常量 描述 字符串常量 用双引号括起来的内容 整 ...

  2. java基础-引用数据类型之二维数组(Array)

    java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...

  3. java基础-引用数据类型之一维数组(Array)

    java基础-引用数据类型之一维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的定义 1>.为什么需要数组 保存一个数据可以定义一个变量,如果要保 ...

  4. Java基础-引用数据类型之集合(Collection)

    Java基础-引用数据类型之集合(Collection) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便 ...

  5. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  6. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  7. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  8. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  9. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

随机推荐

  1. Java 利用递归删除文件以及文件夹

    直接上代码: /** * 递归删除 文件/文件夹 * * @param file */ public static void deleteFile(File file) { System.out.pr ...

  2. 阿里云centos系统中配置mysql,并远程连接到本地的navicat

    1.直接使用yum命令下载mysql5.6来进行安装是不能成功的,安装过程会有问题,这里我们需要使用rpm命令来先进下载.下载路径为:http://dev.mysql.com/get/mysql-co ...

  3. Mvc4_mvc4跟mysql语法

    mvc4: 子页面:@section A{} 母页面:@RenderSection("A",false) false:别的页面没有定义为A的Section的话 也没事,layout ...

  4. Excel读取Word Table元素

    Option Explicit Sub Mian() Application.ScreenUpdating = False Application.DisplayAlerts = False Appl ...

  5. 如何干净的卸载docker

    先上服务器环境信息: 卸载的原因: 宿主机过段时间就磁盘100%了,导致continart异常退出,后来找了很多解决方案,才发现是安装docker的时候有个配置文件错误(正常的应该是|Storage ...

  6. HDU排序水题

    1040水题; These days, I am thinking about a question, how can I get a problem as easy as A+B? It is fa ...

  7. 2、Arx二次开发创建第一个应用程序

    一.本节课程 Arx二次开发创建第一个应用程序 二.本节要讲解的知识点 1.手动创建ARX的应用的步骤. 2.应用向导创建ARX应用程序的步骤. 三.具体内容 1.需求:创建一个Hello World ...

  8. PAT甲题题解-1027. Colors in Mars (20)-水。。。

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  9. FTP地址

    访问不了FTP的同学可以试试用IPv6 地址2001:da8:203:ed5:CEB2:55FF:FE8B:ED1来访问,用户名密码不变.

  10. Linux第二章读书笔记

    1.获取内核源码 1.1Git 分布式的:下载和管理Linux内核源代码: - 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/lin ...