目录

1.基本数据类型

1.1.逻辑型——boolean

1.2.文字型——char和String

1.2.1.char

1.2.2.String

1.3.整数类型:byte,short,int和long

1.3.1.byte

1.3.2.short

1.3.3.int

1.3.4.long

1.4.浮点型:float和double

1.4.1.float

1.4.2.double

1.5.输出Java基本数据类型相关的一些常数

2.复合数据类型

类:class

接口:interface

数组:Array

枚举

3.基本类型与引用类型变量

4.两种类型变量的不同处理

5.引用型变量的赋值

总结:


Java,C,C++是强类型语言,定义一个变量一定要规定它的类型。

js是弱类型语言,在声明变量时不需要指定数据类型,直接使用var修饰符声明变量。变量没有类型,但是数据本身是有类型的。

Java中数据类型分为两大类:基本数据类型和复合数据类型。

1.基本数据类型

Java语言中定义了4类共8种基本数据类型。

  • 逻辑型:boolean。
  • 文本型:char。
  • 整型:byte,short,int和long。
  • 浮点型:double和float。

1.1.逻辑型——boolean

基本语法格式:

boolean 变量名 = 初始值; 

代码示例:

boolean value = true;

注:

1).boolean类型数据只有两种取值true(真)和false(假);

2).boolean类型有些JVM的实现占1个字节,有些占1个比特位,(无明确规定);

3).与其他高级语言不同,Java中的布尔值和数字之间不能来回转换,即false和true不对应于任何零或非零的整数值。

4).boolean型变量的默认初始值为false。

1.2.文字型——char和String

char是文字型的基本数据类型,而String是类不是基本类型,但很常用,所以在此一并介绍。

1.2.1.char

基本语法格式:

char 变量名 = '初始值';

代码示例:

char ch = 'A';
char ch = '和'; //使用一个字符表示一个汉字

注:

1).Java中使用 单引号 + 单个字母 的形式表示字符字面值。

2).计算机中的字符本质上是一个整数。在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符。因此一个字符占用2个字节。表示的字符种类更多,包括中文。

3).字符型变量的默认初始值是'\u0000'。(空字符,代表一个空格)。

4).执行javac时可能会出现乱码报错:未结束的字符文字。此时在执行javac时加上-encoding UTF-8选项即可。

Unicode字符集可以支持各类文字的字符,通过将国际标准的Unicode字符集作为字符变量的取值范围,使Java能方便地处理各种语言(例如将汉字作为字符型变量的值)。

一些控制字符不能直接显示,可利用转义序列来表示这些字符。还有一种直接以八进制或十六进制代表字符值的表示方法,在反斜杠后跟3位八进制数字或在反斜杠后跟u,后面再跟4位十六进制数字都可以代表一个字符常量,如"\141"和"\u0061"都代表字符常量"a"。

转义字符 描述 转义字符 描述
\ddd 1~3位八进制数所表示的字符 \r 回车
\uxxxx 1~4位十六进制数所表示的字符 \n 换行
\' 单引号字符 \f 走纸换页
\" 双引号字符 \b 退格

\\

反斜杠字符 \t

水平制表(Tab键)

一般情况下,char类型的十六进制Unicode编码值可自动转换成等值的int类型值,并可与int类型数值进行运算。而int类型到char类型需要通过强制类型转换。

1.2.2.String

基本语法格式:

String 变量名 = "初始值";

代码示例:

String name = "zhangsan";

注:

1).Java使用 双引号 + 若干字符 的方式表示字符串字面值。

2).和上面类型不同,String不是基本类型而是引用类型。是一个类。

3).字符串在Java中是对象,在Java中有两个类可以表达字符串:String和StringBuffer。String对象表示的字符串是不能修改的。如果需要对字符串修改,应该使用StringBuffer类。

4).字符串中的字符也是Unicode。与C和C++不同,Java中的字符串不以'\0'为结束符。

5).字符串中的一些特定的不太方便直接表示的字符需要进行转义。

6).引用型变量的默认初始值都是null。

7).在Java中,任何数据类型只要和字符串”+”,都会将其转为字符串而后进行字符串的拼接操作。

public class Test {public static void main(String[] args) {int a = 10;int b = 20;System.out.println("运算结果为:"+a+b);}
}

1.3.整数类型:byte,short,int和long

1.3.1.byte

基本语法格式:

byte 变量名 = 初始值;

代码示例:

byte value = 0;

注:Java中byte类型占1字节。

1.3.2.short

基本语法格式:

short 变量名 = 初始值;

代码示例:

short value = 0;

注:Java中short类型占2字节。这个表示范围较小,一般不推荐使用。

1.3.3.int

基本语法格式:

int 变量名 = 初始值;

代码示例:

int num = 10;

注:

1).初始化操作是可选的,但是建议创建变量时都显式初始化。

即定义了一个整型变量,可以在声明变量时,不赋值。

前提:必须是类中(当类内有方法时,为类内,方法外)的变量。

否则会报错。

public class Test{public static void main(String[] args){int a;System.out.println(a);}
}

这样在类中,方法中会报错:可能尚未初始化变量a。

public class Test{int a;public static void main(String[] args){System.out.println(new Test().a);}
}

这样就可以,不报错,会打印0。注意:这里不能直接打印a,一切皆对象,要new一个新对象。

当在类中(主方法外)定义int变量时,默认值为0。

2).在Java中,一个int变量占4个字节,和操作系统没有直接关系。(C语言中一个int变量所占字节数与操作系统,编译器有关)

字节是计算机中表示空间大小的基本单位。

计算机使用二进制表示数据。

8个二进制位(bit)为1个字节(Byte)。

1KB = 1024Byte

1MB = 1024KB

1GB = 1024MB

1.3.4.long

基本语法格式:

long 变量名 = 初始值;

代码示例:

long num = 10L; //也可写作10l(小写L)

注:Java中long类型占8字节。

小结:由于char类型的值可以转换为int型,故下面一起列出char和这4种类型的长度与取值范围。

类型 长度 取值范围
byte 8位 -2^7~2^7-1,即-128~127
short 16位 -2^15~2^15-1,即-32768~32767
int 32位 -2^31~2^31-1,即-2147483648~2147483647
long 64位 -2^63~2^63-1,即-9223372036854775808~9223372036854775807
char 16位 '\u0000'~'\uffff',即0~65535

注:

1).Java中所有的整数类型都是有符号的整数类型,Java没有无符号整数类型(最高位表示正负,0表示正数,1表示负数)。

2).所有整型变量的默认初始值为0。

3).由于不同的机器对于多字节数据的存储方式不同,可能是从低字节向高字节存储,也可能是从高字节向低字节存储,这样,在分析网络协议或文件格式时,为解决不同机器上的字节存储顺序问题,用byte类型来表示数据会比较合适。但通常,由于其表示的数据范围很小,容易造成溢出,因此尽量少使用。

4).如果一个数超出了计算机的表达范围,称为溢出。超出最大值,称为上溢;超过最小值,称为下溢。将一个整型类型数的最大值加1后,产生上溢而变成了同类型的最小值;最小值减1后,产生下溢而变成了同类型的最大值。

5).整型常量可以有4种形式:二进制(以0b或0B开头),八进制(以0开头),十进制十六进制(以0x或0X开头)。

1.4.浮点型:float和double

1.4.1.float

基本语法格式:

float 变量名 = 初始值;

代码示例:

float num = 1.0f; //也可写作1.0F

注:float类型在Java中占4个字节,遵循IEE754标准。由于表示的数据精度范围较小,一般优先考虑double,不太推荐使用float。

1.4.2.double

基本语法格式:

double 变量名 = 初始值;

代码示例:

double num = 1.0d;  //也可写成1.0D

注:

Java中的double虽然也是8个字节,但是浮点数的内存布局和整数差别很大,不能单独用2^n的形式表示数据范围。

Java的double类型的内存布局遵循IEE754标准,尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差。

import java.math.BigDecimal;public class Test {
public static void main(String[] args) {//精度不准System.out.println(1.1 * 1.1);//使用此类来表示小数BigDecimal b1 = BigDecimal.valueOf(1.1);BigDecimal b2 = BigDecimal.valueOf(1.1);System.out.println(b1.multiply(b2));}
}

当使用double类型进行小数运算时,精度会出现不准,使用BigDecimal代替。

小结:

类型

长度 取值范围
float 32位 1.4e-45~3.4028235e+38
double 64位 4.9e-324~1.7976931348623157e+308

1).双精度类型double比单精度类型float具有更高的精度和更大的表示范围,但float类型具有速度快,占用内存小的优点。

2).浮点型变量的默认初值是0.0。浮点数在运算过程中不会因为溢出而导致异常处理。如果出现下溢,结果为0.0;如果上溢,结果为正或负无穷大;如果出现数学上没有定义的值,如0.0/0.0,结果被视为非法数,NaN(Not-a-Number)。

3).浮点类型的常量默认是double类型,可用科学计数法表示(6.02*10^23可表达为6.02e23)。

1.5.输出Java基本数据类型相关的一些常数

public class SomeConstTest{public static void main(String args[]){//输出byte型的最大值与最小值System.out.println("Byte.MAX_VALUE = " + Byte.MAX_VALUE);System.out.println("Byte.MIN_VALUE = " + Byte.MIN_VALUE);System.out.println();//输出short型的最大值与最小值System.out.println("Short.MAX_VALUE = " + Short.MAX_VALUE);System.out.println("Short.MIN_VALUE = " + Short.MIN_VALUE);System.out.println();//输出int型的最大值与最小值System.out.println("Integer.MAX_VALUE = " + Integer.MAX_VALUE);System.out.println("Integer.MIN_VALUE = " + Integer.MIN_VALUE);//当整数最大值+1,发生溢出(当前的数据类型放不下当前数据)//当发生数据溢出时,需要更换更大的数据类型。System.out.println("Integer.MAX_VALUE + 1 = " + Integer.MAX_VALUE + 1);System.out.println("Integer.MIN_VALUE - 1 = " + Integer.MIN_VALUE - 1);System.out.println();//输出long型的最大值与最小值System.out.println("Long.MAX_VALUE = " + Long.MAX_VALUE);System.out.println("Long.MIN_VALUE = " + Long.MIN_VALUE);System.out.println();//输出float型的最大值与最小值System.out.println("Float.MAX_VALUE = " + Float.MAX_VALUE);System.out.println("Float.MIN_VALUE = " + Float.MIN_VALUE);System.out.println();//输出double型的最大值与最小值System.out.println("Double.MAX_VALUE = " + Double.MAX_VALUE);System.out.println("Double.MIN_VALUE = " + Double.MIN_VALUE);System.out.println();//输出float型的正无穷大与负无穷大System.out.println("Float.POSITIVE_INFINITY = " + Float.POSITIVE_INFINITY);System.out.println("Float.NEGATIVE_INFINITY = " + Float.NEGATIVE_INFINITY); System.out.println();//输出double型的正无穷大与负无穷大System.out.println("Double.POSITIVE_INFINITY = " + Double.POSITIVE_INFINITY);System.out.println("Double.NEGATIVE_INFINITY = " + Double.NEGATIVE_INFINITY); System.out.println();//输出float型0/0System.out.println("Float.NaN = " + Float.NaN);System.out.println();//输出double型0/0System.out.println("Double.NaN = " + Double.NaN);System.out.println();}
}

运行结果:

Byte.MAX_VALUE = 127
Byte.MIN_VALUE = -128Short.MAX_VALUE = 32767
Short.MIN_VALUE = -32768Integer.MAX_VALUE = 2147483647
Integer.MIN_VALUE = -2147483648
Integer.MAX_VALUE + 1 = -2147483648
Integer.MIN_VALUE - 1 = 2147483647Long.MAX_VALUE = 9223372036854775807
Long.MIN_VALUE = -9223372036854775808Float.MAX_VALUE = 3.4028235E38
Float.MIN_VALUE = 1.4E-45Double.MAX_VALUE = 1.7976931348623157E308
Double.MIN_VALUE = 4.9E-324Float.POSITIVE_INFINITY = Infinity
Float.NEGATIVE_INFINITY = -InfinityDouble.POSITIVE_INFINITY = Infinity
Double.NEGATIVE_INFINITY = -InfinityFloat.NaN = NaN
Double.NaN = NaN

2.复合数据类型

  • 类:class

  • 接口:interface

  • 数组:Array

  • 枚举


上面所说的4类8种基本数据类型,是Java的内置类型。在很多应用程序开发中,仅使用这几种类型是远不够的。

一般将用户定义的新类型称为复合数据类型。在Java中,接口是两种用户定义的复合数据类型。

例如:如果要处理日期,要独立声明3个整数,分别代表日,月,年。将这三个变量进行封装,用class关键字创建一个日期类。

class MyDate{int day;int month;int year;
}

使用语言内置类型定义变量时,因为每种类型都是预定义的,所以无须程序员指定变量的存储结构。

对于新的数据类型,需要指定该类型所需的存储空间以及如何解释这些空间中的内容。新类型不是通过字节数指定空间大小,也不是通过位的顺序和含义定义该存储空间的含义,而是通过包含在类定义中的已有数据类型来提供这些信息。

复合数据类型由程序员在源程序中定义。一旦有了定义,该类型就可以像其他类型一样使用。可以声明MyDate类的变量,并且日期的年,月,日三部分也都由该变量表示。例如:

MyDate a, b;

对于一个日期的年,月,日各组成部分的使用,都是通过MyDate类型的a,b变量进行,例如:

a.day = 30;
a.month = 12;
a.year = 1999;

在定义了MyDate类后,对于一个日期的定义只需要声明一个变量,并且日期中的3个组成部分被封装为一个有机的整体,它们之间的取值约束关系可以通过在MyDate类内部定义方法实现,操纵MyDate变量的程序员不需要关心这些问题。因此在Java中使用类或接口这样的复合数据类型,不仅反映了现实世界事物的本质形态,还使程序简练并且更可靠。


Java中数据类型分为两大类:基本数据类型与复合数据类型。相应地,变量也有两种类型:基本类型与引用类型。

3.基本类型与引用类型变量

基本数据类型的变量包含了单个值,这个值的长度和格式符合变量所属数据类型的要求,可以是一个数字,一个字符或一个布尔值。

引用类型变量的值是指向内存空间的引用(地址)。所指向的内存中保存着变量所表示的一个值或一组值。引用在其他语言中称为指针或内存地址。Java语言与其他程序设计语言不同,不支持显示使用内存地址,而必须通过变量名对某个内存地址进行访问。

4.两种类型变量的不同处理

在Java中基本类型变量声明时,系统直接给该变量分配空间,因此程序中可以直接操作。例如:

int a; //声明变量a的同时,系统给a分配了空间
a = 12;

引用类型变量声明时,只是给该变量分配引用空间,数据空间未分配。因此引用变量声明后不能直接引用,下列第二条语句是错误的。

MyDate today;
today.day = 14; //错误!因为today对象的数据空间未分配

引用型变量在声明后必须通过实例化开辟数据空间,才能对变量所指向的对象进行访问。

MyDate today;
today = new Date();

上面第一条语句的执行,将给today变量分配一个保存引用的空间。第二条语句分两个步骤执行:首先执行new Date(),给today变量开辟数据空间,然后再执行第二条语句中的赋值操作。

5.引用型变量的赋值

Java中引用型变量之间的赋值是引用赋值。

MyDate a, b; //在内存开辟两个引用空间
a = new MyDate(); //开辟MyDate对象的数据空间,并把该空间的首地址赋给a
b = a; //将a存储空间中的地址写到b的存储空间中

总结:

数据类型:

  • 基本数据类型

数值型:整型:byte,short,int,long(默认值为0)

浮点型:float,double(默认值为0.0)

字符型:char(默认值为'\u0000')

布尔型:boolean(默认值为false)

  • 复合(引用)数据类型

数组,类,接口(默认值为null)

7-基本数据类型和复合数据类型(引用数据类型)相关推荐

  1. 基本数据类型和引用数据类型作为参数时候的问题

    1.看看怎么打印? OC: Java: 答案:10,hello, 25; hello, 你好世界 总结:基本数据类型在栈区,引用数据类型对象在堆区 基本数据类型作为参数传递的时候,不会改变其值. 引用 ...

  2. 【C++ 语言】引用数据类型 ( 引用数据类型定义 | 引用数据类型使用 | 引用类型参数 )

    文章目录 引用类型 引用类型 引用数据类型 : 1. 引用数据类型定义 : 类型名称& 变量名 = 对应类型变量名称 ; //① 定义 普通 类型 变量int a = 8;//② 定义 引用类 ...

  3. 引用数据类型的方法调用

    引用数据类型的方法调用 /*** 引用数据类型的方法调用*/ public class TestRefArgs{public static void main(String[] args) {Poin ...

  4. java引用数据类型可以更改类型_java,基本数据类型和引用数据类型

    java中的数据类型分为基本数据类型和引用数据类型 基本数据类型 整型:byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用数据类型 ...

  5. java 引用数据类型Scanner类 Random类

    Scanner类是属于引用数据类型 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 基本数据类型定义:数据类型  变量名  =  值;            引用 ...

  6. java中引用数据类型有哪几种

    本文主要介绍了java中引用数据的类型,具有很好的参考价值.希望对你有帮助.如有错误或不足之处,请不吝赐教. 目录 Java中的引用数据类型有哪些?先说Java中的引用数据类型:1.类别引用2.接口参 ...

  7. JAVA八种基本数据类型+三种引用数据类型

    一.Java八种基本数据类型 在程序设计中经常用到一系列类型,把它们存储在堆栈中,加快程序的运行效率,它们就是基本数据类型.Java提供了8中基本数据类型,分别是:boolean.char.byte. ...

  8. Java数据类型(八种基本数据类型 + 四种引用数据类型)

    1.位(bit): 又名 比特位,表示二进制位,是计算中内部数据储存的最小单位.一个二进制位只能表示0和1两种状态. 2.字节(byte): 是计算机中处理数据的基本单位.一个字节等于八位(1Byte ...

  9. ArrayList基本使用和引用数据类型

    ArrayList 1.ArrayList是一个数组列表,提供了相关的添加.删除.修改.遍历等功能. ArrayList 类提供了很多有用的方法 2.初始化 ArrayList<E> ob ...

  10. JavaScript基本数据类型与引用数据类型

    一.数据类型 基本数据类型:String.Number.Boolean.undefined.null.Symbol(ES6) 引用数据类型:Object.Array.Function.Date 基本数 ...

最新文章

  1. (转)android UI进阶之用ViewPager实现欢迎引导页面
  2. 批量模糊查询_模糊匹配,Power Query的这个功能太实用了,可惜Excel还没有
  3. 树状数组,Fenwick Tree
  4. c语言整数四则运算表达式的输出格式控制,Educoder CC++基本输入输出
  5. codeforces gym-101745 C-Infinite Graph Game 分块
  6. Storm与Spark区别
  7. Web Developer's Handbook
  8. [改善Java代码]避免对象的浅拷贝
  9. Spring boot 2.1版本、2.3及以上版本使用actuator实现优雅关闭程序
  10. 简述deque容器的插入删除原理
  11. 机器码(machine code)和字节码(byte code)是什么?
  12. SSM框架运行原理以及流程
  13. 数据清洗的主要类型及步骤
  14. NISP和CISP考试通过率怎样?
  15. 使用手持式频谱分析仪进行TDD信号分析
  16. keil4和keil5如何兼容使用
  17. opencv实现图像平移
  18. Arch 安装 deb
  19. nodeJS实现简单网页爬虫功能
  20. ACM集训队论文合集

热门文章

  1. tomcat出现“localhost拒绝了我们的请求”问题
  2. 腾讯派息式减持京东,“伯克希尔”的投资策略变的逻辑是?
  3. STM32 CubeIDE(九)串口通讯
  4. Ajax --- 客户端与服务器端之间传递数据
  5. 解决方法数超65536(java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536)
  6. 一切免费的大学视频教程,免费空间和网盘
  7. 【转载】SLB技术原理浅析
  8. im4java 水印_app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印
  9. 计算机应用论文评语大全,硕士学位论文评语大全
  10. 【Qt】通过QtCreator源码学习Qt(十二):Q_D和Q_Q指针(简称“d指针”)详解