对Java数据类型的初步理解

来源:互联网 发布:微信开发框架 php 编辑:程序博客网 时间:2024/05/14 13:33

学习一门语言最开始当然是从其数据类型开始

 

java是静态类型的,也就是说所得数据类型在编译阶段就已经确定了,这与C++有很大不同。java是强类型的,第一次申明变量必须说明其类型

对于java 数据类型从大的方面可以分为内置类型和引用类型

内置类型

  内置类型分为三种:bool、char、数值类型。其中数值类型又可以分为:byte、short、int、long、float、double,因此总共有八种。内置类型都存在于栈(不考虑并行开发)上。

  八大类型就不一一介绍,类比c++即可,下面说一些不同的地方:

  在java中类型大小是确定的,可以说机器无关(跨平台性很强);

  用final来表明一个数据为常量;

  数值类型无unsigned之分,char可以被视为数值类型,并且是无符号的;

 char数据类型太过底层,编码方式与C++不同采用Unicode编码方式,char描述了一个代码单元,而很多字符使用两个代码单元表示,因此不推荐char,而推荐string

更细节的一些;

  java中的字面值常量:

    1) 数值类型字面值:
         对于整型字面值若不加说明则默认为int类型,但这产生一个问题,当我们用一个字面值类型给一个byte或者short赋值的时候,如果字面值在所声明类型的范围之内则编译器会发生自动转换,相反如果超过范围,则编译器会报错(这与C或者C++有很大不同)

,另外一个严重的问题谁,如果我们给一个方法传递一个字面值,而方法所接受的类型是byte则编译器报错

     2)浮点字面值

        不加F(f)默认为double类型,其他需要注意的问题类比上面。

  类型转换

     分为自动转换和强制转换,和C基本一致,需要注意的是对于基本类型java都有一个包装类,这些包装类有对应的方法进行强制类型转换

java的引用类型有(强、软、弱、虚。。这比较复杂,先不讨论,只看简单具体的例子)

对象、数组、枚举。引用类型类似C++用new创建的对象,基本的申明定义啥的略过不写。

(1)     对于java的一个对象,对象本身储存在堆上,而引用对象的引用变量储存在相应的栈上,当用一个引用变量给另外一个引用变量赋值时,实际上是对对象地址的拷贝,两个引用变量将引用同一个对象,因此如果想实现一个对象的拷贝需要使用专门的方法。对于一个在堆上的对象,当没有变量再引用它时,java将在某一个时间点将其回收,无需程序员显式处理。(比起C++,在内存管理上轻松安全很多。。。)

(2)     java数组:java数组和C++用new创建的数组类似,一但创建长度便不可变。同时数组也是一个对象,引用数组变量存储在栈,数组元素线性排列在堆上。有一些操作数组的方法比如拷贝(拷贝引用对象,之前所说的效果相同)等。当然java也有可变长度数组。对于多维数组,将其视为数组的数组,引用变量引用数组引用变量储存在栈上,数组引用变量储存在堆上引用数组(以二维为例),