【无标题】

数据类型和变量

       数据类型用于对数据归类,以便于理解和操作。对Java语言而言,有如下基本数据类型。

(1)整数类型:有4种整型byte/short/int/long,分别有不同的取值范围;

(2)小数类型:有两种类型float/double,有不同的取值范围和精度;

(3)字符类型:char,表示单个字符;

(4)真假类型:boolean,表示真假。

      基本数据类型都有对应的数组类型,数组表示固定长度的同种数据类型的多条记录,这些数据在内存中连续存放。比如,一个自然数可以用一个整数类型数据表示,100个连续的自然数可以用一个长度为100的整数数组表示。一个字符可以用一个char类型数据表示,一段文字可以用一个char数组表示。 Java是面向对象的语言,除了基本数据类型,其他都是对象类型。

对象到底是什么呢?

简单地说,对象是由基本数据类型、数组和其他对象组合而成的一个东西,以方便对其整体进行操作。

比如,一个学生对象,可以由如下信息组成:

姓名:一个字符数组;

年龄:一个整数;

性别:一个字符;

入学分数:一个小数。

      日期在Java中也是一个对象,内部表示为整型long。 世界万物都是由元素周期表中的基本元素组成的,基本数据类型就相当于化学中的基本元素,而对象就相当于世界万物。 为了操作数据,需要把数据存放到内存中。所谓内存在程序看来就是一块有地址编号的连续的空间,数据放到内存中的某个位置后,为了方便地找到和操作这个数据,需要给这个位置起一个名字。编程语言通过变量 这个概念来表示这个过程。

       声明一个变量,比如int a,其实就是在内存中分配了一块空间,这块空间存放int数据类型,a指向这块内存空间所在的位置,通过对a操作即可操作a指向的内存空间,比如a=5这个操作即可将a指向的内存空间的值改为5。 之所以叫“变” 量,是因为它表示的是内存中的位置,这个位置存放的值是可以变化的。

      虽然变量的值是可以变化的,但变量的名字是不变的,这个名字应该代表程序员心目中这块内存空间的意义,这个意义应该是不变的。比如,变量int second表示时钟秒数,在不同时间可以被赋予不同的值,但它表示的始终是时钟秒数。之所以说应该 ,是因为这不是必需的,如果一定要为一个名为age的变量赋予身高的值,计算机也拿你没办法。

  • 重要的话再说一遍!变量就是给数据起名字,方便找不同的数据,它的值可以变,但含义不应变。

再比如说一个合同,可以有4个变量:

first_party:含义是甲方;

second_party:含义是乙方;

contract_body:含义是合同内容;

contract_sign_date:含义是合同签署日期。

       这些变量表示的含义是确定的,但对不同的合同,它们的值是不同的。初学编程的人经常使用像a、b、c、hehe、haha这种无意义的名字。在此建议为变量起一个有意义的名字吧!通过声明变量,每个变量赋予一个数据类型和一个有意义的名字,我们就告诉了计算机要操作的数据。 有了数据,如何对数据进行操作呢?我们先来看对数据能做的第一个操作:赋值。1.2 赋值 声明变量之后,就在内存分配了一块位置,但这个位置的内容是未知的,赋值就是把这块位置的内容设为一个确定的值。Java中基本类型、数组、对象的赋值有明显不同.

基本类型

(1)整数类型 整数类型有byte、short、int和long,分别占1、2、4、8个字节。 整数类型和取值范围 我们用表示指数,27即2的7次方。这个范围我们不需要记得那么清楚,有个大概范围认识就可以了。

赋值形式很简单,直接把熟悉的数字常量形式赋值给变量即可,对应的内存空间的值就从未知变成了确定的常量。但常量不能超过对应类型的表示范围。例如: byte b = 23; short s = 3333; int i = 9999; long l = 32323; 但是,在给long类型赋值时,如果常量超过了int的表示范围,需要在常量后面加大写或小写字母L,即L或l,例如: long a = 3232343433L; 之所以需要加L或l,是因为数字常量默认为是int类型。

(2)小数类型 小数类型有float和double,占用的内存空间分别是4和8字节,有不同的取值范围和精度,double表示的范围更大,精度更高。取值范围一般也不需要记住,有个大概印象就可以了。E表示以10为底的指数,E后面的+号和-号代表正指数和负指数,例如:1.4E-45表示1.4乘以10的-45次方。

对于double,直接把熟悉的小数表示赋值给变量即可,例如: double d = 333.33; 但对于float,需要在数字后面加大写字母F或小写字母f,例如: float f = 333.33f; 这是由于小数常量默认是double类型。 除了小数,也可以把整数直接赋值给float或double,例如: float f = 33; double d = 3333333333333L;

(3)真假类型 真假(boolean)类型很简单,直接使用true或false赋值,分别表示真和假,例如: boolean b = true; b = false;

(4)字符类型 字符类型char用于表示一个字符,这个字符可以是中文字符,也可以是英文字符,char占用的内存空间是两个字节。赋值时把常量字符用单引号括起来,不要使用双引号,例如: char c = 'A'; char z = '马'; 大部分的常用字符用一个char就可以表示,但有的特殊字符用一个char表示不了。

前面介绍的赋值都是直接给变量设置一个常量值,但也可以把变量赋给变量,例如: int a = 100; int b = a; 变量可以进行各种运算(1.3节介绍),也可以将变量的运算结果赋给变量,例如: int a = 1; int b = 2; int c = 2*a+b; //2乘以a的值再加上b的值赋给c 前面介绍的赋值都是在声明变量的时候就进行了赋值,但这不是必需的,可以先声明变量,随后再进行赋值。

数组类型 基本类型的数组有3种赋值形式,如下所示:

  1. int[] arr = {1,2,3};
  2. int[] arr = new int[]{1,2,3};
  3. int[] arr = new int[3]; arr[0]=1; arr[1]=2; arr[2]=3; 第1种和第2种都是预先知道数组的内容,而第3种是先分配长度,然后再给每个元素赋值。

第3种形式中,即使没有给每个元素赋值,每个元素也都有一个默认值,这个默认值跟数组类型有关,数值类型的值为0,boolean为false,char为空字符。

数组长度可以动态确定,如下所示:

int length = ... ;//根据一些条件动态计算 int arr = new int[length]; 数组长度虽然可以动态确定,但定了之后就不可以变。

数组有一个length属性,但只能读,不能改。还有一个小细节,不能在给定初始值的同时给定长度。

即如下格式是不允许的: int[] arr = new int[3]{1,2,3} 可以这么理解,因为初始值已经决定了长度,再给个长度,如果还不一致,计算机将无所适从。 数组类型和基本类型是有明显不同的,一个基本类型变量,内存中只会有一块对应的内存空间。但数组有两块:一块用于存储数组内容本身,另一块用于存储内容的位置。

用一个例子来说明,有一个int变量a,以及一个int数组变量arr,其代码、变量对应的内存地址和内存内容如表1-3所示。 表1-3 变量对应的内存地址和内容 基本类型a的内存地址是1000,这个位置存储的就是它的值100。数组类型arr的内存地址是2000,这个位置存储的值是一个位置3000,3000开始的位置存储的才是实际的数据“1,2,3”。

为什么数组要用两块空间? 不能只用一块空间吗?我们来看下面这段代码:

int[] arrA = {1,2,3}; int[] arrB = {4,5,6,7}; arrA = arrB; 这段代码中,arrA初始的长度是3,arrB的长度是4,后来将arrB的值赋给了arrA。如果arrA对应的内存空间是直接存储的数组内容,那么它将没有足够的空间去容纳arrB的所有元素。

用两块空间存储就简单得多,arrA存储的值就变成了和arrB的一样,存储的都是数组内容{4,5,6,7}的地址,此后访问arrA就和arrB是一样的了,而arrA{1,2,3}的内存空间由于不再被引用会进行垃圾回收,如下所示: arrA {1,2,3} \ \ arrB -> {4,5,6,7} 由上也可以看出,给数组变量赋值和给数组中元素赋值是两回事,给数组中元素赋值是改变数组内容,而给数组变量赋值则会让变量指向一个不同的位置。 上面我们说数组的长度是不可以变的,不可变指的是数组的内容空间,一经分配,长度就不能再变了,但可以改变数组变量的值,让它指向一个长度不同的空间,就像上例中arrA后来指向了arrB一样。 给变量赋值就是将变量对应的内存空间设置为一个明确的值,有了值之后,变量可以被加载到CPU,CPU可以对这些值进行各种运算,运算后的结果又可以被赋值给变量,保存到内存中。

 

点点关注吧!!!  持续更新哦!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值