`

Java 数据类型 数据长度(一)

阅读更多

数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复 杂的、简单的。各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范相对严格。数据类型是语言的抽象原子概念,可 以说是语言中最基本的单元定义,在Java里面,本质上数据类型分为两种:简单类型和复杂类型。

  简单类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。

  复杂类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。

  i.Java中的基本类型:

  1)概念:

  Java中的简单类型从概念上分为四种:实数、整数、字符、布尔值。但是有一点需要说明的是,Java里面有八种原始类型,其列表如下:

  实数double、float

  整数byte、short、int、long

  字符char

  布尔值boolean

  复杂类型和基本类型的内存模型本质上不一样,简单数据类型的存储原理:所有的简单数据类型不存在“引用”概 念,简单数据类型直接存储在内存中的内存栈上,数据本身的值存储在栈空间里面,而Java语言里面只有这八种数据类型是这种存储模型;而其他的只要是继承 于Object类的复杂数据类型都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地 讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。

  2)原始类型特征

  Java的简单数据讲解列表如下:

  int:int整数类型,在存储的时候,用4个字节存储,范围为-2,147,483,648到2,147,483,647,在变量初始化的时候,int类型的默认值为0

  shortshort也属于整数类型,在存储的时候,用2个字节存储,范围为-32,76832,767,在变量初始化的时候,short类型的默认值为0,一般情况下,因为Java本身转型的原因,可以直接写为0

  longlong也属于整数类型,在存储的时候,用8个字节存储,范围为-9,223,372,036,854,775,8089,223,372,036, 854,775,807,在变量初始化的时候,long类型的默认值为0L0l,也可直接写为0

  bytebyte同样属于整数类型,在存储的时候,用1个字节来存储,范围为-128127,在变量初始化的时候,byte类型的默认值也为0

  floatfloat属于实数类型,在存储的时候,用4个字节来存储,范围为32IEEEE 754单精度范围,在变量初始化的时候,float的默认值为0.0f0.0F,在初始化的时候可以写0.0

  doubledouble同样属于实数类型,在存储的时候,用8个字节来存储,范围为64IEEE 754双精度范围,在变量初始化的时候,double的默认值为0.0

  charchar属于字符类型,在存储的时候用2个字节来存储,因为Java本身的字符集不是用ASCII码来进行存储,是使用的16位Unicode字符集,它的字符范围即是Unicode的字符范围,在变量初始化的时候,char类型的默认值为'u0000'

  booleanboolean属于布尔类型,在存储的时候不使用字节,仅仅使用1来存储,范围仅仅为0和1,其字面量为truefalse,而boolean变量在初始化的时候变量的默认值为false

  ——[$]提供一个字面量赋值的例子——

package org.susan.java.basic;

public class AssignTester {
   public static void main(String args[]){
       int x,y;//定义x,y变量
       float f = 12.34f; //定义float类型的变量并赋值
       double w = 1.234;//定义double类型变量并且赋值
       boolean flag = true ; //指定变量flag为boolean型,且赋初值为true
       char c ; //定义字符型变量c
       String str ; //定义字符串变量str
       String str1 = " Hi " ; //指定变量str1为String型,且赋初值为Hi
       c = 'A' ; //给字符型变量c赋值'A'
       str = " bye " ; //给字符串变量str赋值"bye"
       x = 12 ; //给整型变量x赋值为12
       y = 300; //给整型变量y赋值为300
   }
}

 

  3)自动拆箱(AutoBox):

  Java里面,每一种原始类型都对应着相应的包装类型,在JDK1.5之前(不包含JDK1.5),当包装类和原始类型进行相互转换的时候,需要调用包装类型的方法进行转换,不能通过操作符进行直接的计算。下边是一个原始类型和包装类型的一个对应表:

原始类型 对应的包装类型 默认值 存储格式 数据范围
short java.lang.Short 0 2个字节 -32,768到32767
int java.lang.Integer 0 4个字节 -2,147,483,648到2,147,483,647
byte java.lang.Byte
0 1个字节 -128到127
char java.lang.Character \u0000 2个字节 Unicode的字符范围
long java.lang.Long 0L或0l 8个字节 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807
float java.lang.Float 0.0F或0.0f 4个字节 32位IEEEE 754单精度范围
double java.lang.Double 0.0或0.0D(d) 8个字节 64位IEEE 754双精度范围
boolean java.lang.Boolean false 1位 true(1)或false(0)

  简单看看下边这段代码:

package org.susan.java.basic;

public class AutoBoxTester {
   public static void main(String args[]){
       Integer integer = new Integer(12);
       int integer2 = 33;
       System.out.println(integer + integer2);
   }
}
  这段代码在JDK 1.5版本以上可以通过编译,而且不会报错,运行结果如下输出:
45
   但是如果这段代码在JDK 1.4上边编译就会有问题了,因为在JDK 1.4的规范里面Integer属于一个包装类型,而int是原始类型,如果一个包装类型和原始类型要进行想对应的运算的时候,需要进行转换操作,直接将 Integer类型转换称为原始类型操作,否则二者是不允许相加的,可以试试将上边代码用1.4版本进行编译:
javac -source 1.4 AutoBoxTester.java
  就会收到下边的异常:
AutoBoxTester.java:5: operator + cannot be applied to java.lang.Integer,int
   System.out.println(integer + integer2);
  为什么呢?其实编译器给的信息很明显,使用JDK 1.5进行编译可以直接通过而且不会报错,是因为JDK 1.5提供了自动拆箱和自动装箱的功能,而JDK 1.4里面如果要使得上边的代码段可以编译通过,必须做一个简单的修改:
public class AutoBoxTester {
   public static void main(String args[]){
       Integer integer = new Integer(12);
       int integer2 = 33;
       System.out.println(integer.intValue() + integer2);
   }
}
  改成上边代码段了过后,在JDK 1.4平台下就可以得到输出:
45
  从上边的例子可以看出,在JDK 1.5之前,如果要针对包装类进行数值计算,必须要将包装类直接转化称为原始类型,否则操作符本身是不会支持包装类的操作的,但是在JDK 1.5以及以后就没有这个限制了。
  【简 单总结:自动拆箱的意思就是不需要经过用户手工编程,编译器会直接识别包装类和原始类型相互之间的转换以及运算,并且把包装类型拆成原始类型进行代码里面 规定的数值运算或者其他操作,这功能JDK的最低支持版本是1.5。其实对Java语言本身而言,Integer这种封装类实际上就是Java里面继承于 Object的类的对象实例,只是在1.4之前,必须调用方法xxxValue()来完成手工拆箱的操作,只是这个在JDK 1.5不会有此限制。】
分享到:
评论

相关推荐

    Java数据类型和MySql数据类型对应一览

    Java 数据类型和 MySql 数据类型对应一览 在 Java 编程语言中,数据类型是指变量或函数可以持有的值的类型。 MySql 数据库也具有其自己的数据类型,用于存储和管理数据。在本文中,我们将对 Java 数据类型和 MySql ...

    Java数据类型和MySql数据类型对应表

    Java 数据类型和 MySql 数据类型对应表 在 Java 编程中,了解 Java 数据类型和 MySql 数据类型的对应关系非常重要。这是因为在 Java 应用程序中,我们经常需要与数据库进行交互,而 MySql 是一种常用的关系数据库...

    sqlserver数据库类型对应Java中的数据类型

    SQL Server 数据库类型对应 Java 中的数据类型 SQL Server 是一个关系数据库管理系统,Java 是一个广泛使用的编程语言。在 Java 中,对数据库的操作需要通过 JDBC(Java Database Connectivity)来实现,而在 JDBC ...

    MySql于Java数据类型对应列表

    ### MySQL与Java数据类型对应详解 #### 概述 在进行数据库操作时,尤其是在使用Java进行MySQL数据库开发的过程中,正确地映射数据类型是至关重要的一步。本文将详细介绍MySQL中的各种数据类型及其在Java中的对应...

    JAVA数据类型与Hibernate的类型映射

    这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在Hibernate中有对应的类型映射。例如,int型在Hibernate中通常映射为Integer类型,因为数据库字段可能允许为空...

    Oracle9i数据类型Java数据类型Schema类型对比.doc

    Oracle9i 数据类型、Java 数据类型以及 Schema 类型之间的对比主要关注它们在存储和处理数据时的差异。这些数据类型是编程和数据库管理中的基础,理解它们的关系对于开发与数据库交互的应用程序至关重要。 1. ...

    Java中数据类型和MYSQL中数据类型的对比

    Java 和 MySQL 数据类型之间的对比是理解数据库操作和应用程序开发中数据处理的关键。这两种语言的数据类型在功能和使用上都有所不同,尽管它们都用于存储和处理数据,但各自有着特定的适用场景和特点。 首先,Java...

    java字符串长度的求法,附加Java中数据类型转化

    以上介绍了Java中字符串长度的计算方法、如何访问字符串中的特定字符以及不同数据类型之间的转换。这些是Java编程中非常基础也非常重要的知识点。掌握它们可以帮助开发者更高效地处理字符串和其他数据类型的问题。

    SQL SERVER的数据类型自定义

    这样就定义了一个名为`Currency`的数据类型,它基于`decimal`类型,具有18位总精度和2位小数精度。这个自定义数据类型可以用于存储财务交易中的货币金额,确保数据的准确性和一致性。 #### 结论 掌握SQL Server的...

    JAVA【第3章:Java基础程序设计】_Java数据类型

    本章将深入探讨Java中的数据类型,分为两大类:基本数据类型和引用数据类型。 1. 基本数据类型: - 整型:Java提供了四种整数类型,包括byte(1字节,-128到127),short(2字节,-32,768到32,767),int(4字节,...

    java的八大基础数据类型

    Java 的八大基础数据类型是 Java 语言的一部分,分别是 byte, short, int, long, char, float, double, boolean。下面分别对每种数据类型进行详细介绍: 一、整型 整型在 Java 中分为四种:byte, short, int, long...

    字符串长度的判断 JAVA

    在Java编程语言中,字符串是极其重要的数据类型,用于存储和操作文本信息。字符串的长度判断和截取是常见的操作,对于程序逻辑控制和数据处理至关重要。以下将详细讲解如何在Java中进行字符串长度的判断以及如何截取...

    sql和java数据类型映射.pdf

    在"sql和java数据类型映射.pdf"中,详细阐述了这个映射过程以及相关的JDBC类型。 首先,JDBC通过`getXXX`和`setXXX`方法集,以及`registerOutParameter`方法和`Types`类,使得Java程序员能够在处理数据库操作时无需...

    java获取amr格式语音长度

    帧头包含了帧类型和压缩数据,而帧长度则根据不同的AMR模式变化,范围在12.2到36.8字节之间。因此,计算AMR语音长度的关键在于解析这些帧并累加它们的时间长度。 在Java中,由于标准库并不直接支持AMR文件处理,...

    java基本数据类型与数组

    数组是 Java 中的一种复合数据类型,由相同数据类型的数据组成。数组可以是一维数组或多维数组。一维数组的声明和分配空间可以使用以下方式:int[] z = new int[2];。二维数组的声明和分配空间可以使用以下方式:...

    Java数据类型与MySql数据类型对照表

    本文讲述了Java数据类型与MySql数据类型对照表。分享给大家供大家参考,具体如下: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java....

    JAVA中的数据字典

    8. **元数据**:在Java中,元数据是关于数据的数据,如字段的数据类型、长度、精度等。这些信息在构建数据字典时非常重要,可以使用Java反射API来获取。 9. **异常处理**:在处理数据时,错误和异常是常见的。Java...

    java和c/c++ 数据类型长度的比较

    本文将深入对比Java和C/C++的数据类型长度,以便更好地理解和利用它们。 首先,让我们来看C/C++的数据类型。C语言提供了多种整数类型,包括char、short、int和long。根据Ansi C的规定,char类型通常代表一个字节,...

    sql和java数据类型映射[定义].pdf

    《SQL与Java数据类型映射详解》 在数据库编程中,SQL和Java是两种常见的工具,但它们的数据类型体系并不相同。为了实现Java应用程序与SQL数据库之间的数据交互,JDBC(Java Database Connectivity)提供了一套机制...

Global site tag (gtag.js) - Google Analytics