【Java面向对象基础(一)】数据类型与运算符

【喵"的Android之路】【基础篇(一)】【Java面向对象基础】数据类型与运算符

1、数据类型介绍

在Java中,数据类型分为两种:基本数据类型和引用类型。

基本数据类型共8种,见下表:

基本数据类型 字节数 二进制位数 最小值 最大值 默认值
byte 1 8-bit -2^7 +2^7 - 1 0
short 2 16-bit -2^15 +2^15 - 1 0
int 4 32-bit -2^31 +2^31 - 1 0
long 8 64-bit -2^63 +2^63 - 1 0
float 4 32-bit IEEE754 IEEE754 0.0f
double 8 64-bit IEEE754 IEEE754 0.0d
char 2 16-bit \u0000 \uFFFF \u0000
boolean ---- ---- ---- ---- false
void          

需要指出的是:

  1. boolean这个类型比较特殊,Javadoc中这样描述:

    • boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn‘t something that‘s precisely defined.

    即:boolean类型只有两个值:true和false。使用这个类型来作为true/false分支的简单标识。这个类型只包含一个bit的信息,但是其所占空间并未精确定义

  2. void 也被放在了表中,但其实它不属于基本数据类型,准确的说它是伪类型,是一种无返回值类型。具体不必深究。
  3. 引用类型默认值为null。
  4. String作为参数传递时和其他引用类型不一样,即只传字符串值而非引用地址。

2、两种数据类型的区别

从以下三个方面分别对这两种数据类型进行对比:含义、处理、赋值。

2.1 含义

基本数据类型,其变量代表的是一个具体的值,可以是一个字符、一个数字或者一个布尔值等。

引用数据类型,其变量代表的是一个内存地址,该地址指向一块内存空间,在内存空间内存储着该变量所对应的一个或者一组值。

在Java中,基本数据类型的值和引用数据类型的地址信息是放在栈(Stack)中的,引用数据类型的值放在堆(Heep)中。例:

 1 class Student {
 2     String ID;
 3     String Name;
 4     int Age;
 5     public Student(String id, String name, int age) {
 6         ID = id;
 7         Name = name;
 8         Age = age;
 9     }
10 }
11
12 int a = 10;
13 Student b = new Student("070271006", "喵小咪", 18);

上述变量的堆栈对应情况如下图:

2.2 处理

基本数据类型在声明的同时已经赋予空间,所以可以直接操作。例如:

1 int a = 10;
2 int b = a + 20;

一般情况下,引用类型在声明的时候,只是创建了一个变量,其具体的空间并没有分配。需要使用关键字new来开辟空间存储数据。

例如:

1 Student student = null;    // 此时只是声明了一个Student变量
2 // student.toString();     // 这时候使用该变量访问就会出错:该行会报空指针异常
3 student = new Student("070271006", "喵小咪", 18);// 此时会告知JVM开辟空间存储数据

上述两行代码的空间分配JVM是这样处理的:

  1. 在栈中创建一个名为student的变量,其变量值为空;
  2. 在堆中为Student开辟一块空间,并分别为ID、Name、Age三个成员变量设置默认值;
  3. 根据Student构造方法的定义,为三个成员变量分别赋值:"070271006", "喵小咪", 18
  4. 把Student对象在堆中的地址赋值给栈中的student变量。

经过上述流程,student就可以访问堆中的成员变量。

还有一种比较特殊的情况,就是String类型的使用,其详细分析见下篇文章。

2.3 赋值

基本数据类型的赋值操作确实是实际意义上的“赋值”,比如:

1 int a = 10;
2 int b = a;  // 此时,b的值就是10
3 // 如果修改a的值,b的值不会发生变化。
4 a = 100;   // 此时a的值是100,b的值还是10

一般情况下,引用类型的赋值传递的是堆内存地址,例如:

1 Student stuMiao = new Student("070271006", "喵小咪", 18);
2 Student stuNodin = stuMiao;

上述赋值操作并没有新创建对象,而是在栈中声明了一个名为stuNodin的变量,其变量值和stuMiao这个变量的值相同,都是指向Student这个对象的堆内存的地址。形象的比喻,就像是同一个人的两个名字一样。

如果修改stuMiao这个引用对应的数据,则stuNodin这个引用的数据会同时发生改变。

1 stuMiao.Age = 16;    // 此时,stuMiao.Age 等于 16;stuNodin.Age 等于 16;

同样地,String作为一种特殊类型,仍然不适用上述规则。详见下篇文章。

3、运算符

这里只提供Java中的运算符总览,不再赘述,详见下表:

算数运算符 +,-,×,/,%取余 ,++,--,- 取反
关系运算符 >,<,>=,<=,!=,==
逻辑运算符 !非, &与,|或,^异或,&& 短路与,|| 短路或
按位运算符 ~按位取反, &按位与, |按位或, ^按位异或
移位运算符 << 左移 ,>>带符号右移, >>>不带符号右移
三目条件运算符 D=表达式1?表达式2 :表达式3
赋值运算符 = ,+=,-=

4、循环

Java中基本的循环有两种,即for循环和do-while循环,这里不再赘述。

从J2SE 1.5开始,Java引入了一种for的变型循环:foreach循环。并不是说foreach是类似for的关键字,而是便于理解起的一个名字,其作用就是“Each(逐个)”遍历。基本结构基于for循环,详细如下:

1 for (元素类型t 元素变量 x : 遍历对象list) {
2     引用了x的java语句;
3 }

foreach是一种for的简化版本,主要用于数组和集合的简单遍历操作。但是其也有局限性,其只提供遍历功能,不能进行删除、替换等操作,对于需要记录并使用索引的循环,foreach本身也无法实现(可以自己记录实现)。所以无法替代for循环,但是都可以转换为对应的for循环。

 1 // 实例一,遍历数组:
 2 int[] arrays = new int[] {1, 2, 3};
 3 for (int i : arrays) {
 4     System.out.println(i);
 5 }
 6
 7 //实例二,遍历集合:
 8 List<String> list = new ArrayList<String>();
 9 for (String item : list) {
10     System.out.println(item);
11 }

【Nodin‘s Tips】

本篇主要介绍了Java中的数据类型、运算符和循环,这些都是Java非常基础的知识。但是越是基础的知识越不可小视,俗话说“千里之堤毁于蚁穴”,基础掌握不好难成大器。在基础讲解的同时,对两种数据类型的区别进行了较为详细的分析,是对数据类型的进一步认知,也为我们下篇文章对String进行更详细的分析打下基础。

本文系Nodin原创,转载请注明出处!http://www.cnblogs.com/monodin/p/3841185.html

【Java面向对象基础(一)】数据类型与运算符,布布扣,bubuko.com

时间: 2024-10-18 19:17:13

【Java面向对象基础(一)】数据类型与运算符的相关文章

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

[喵"的Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final类,主要用于字符串的处理. 1.1 不可变性 String内的字符串是不可变的,每一次修改都会重新生成一个新的String对象实例. 例: 1 // 在堆中会创建一个"Hello"字符串实例,把地址赋给对象a 2 String a = new String("Hello&

java基础之数据类型/基本运算符

概述 java语言从1995年sun公司推出发展至今已经有22个年头,现在已经是使用最多的语言之一了.java又是一个比较容易入门的语言,我第一门接触的语言就是java.java发展.java的核心就是面向对象编程,其中多态.继承.封装来体现java的面向对象编程思想,还有java中的集合.流.反射等等.今天我会从最基础的数据类型和基本运算符开始说起:虽然说java的底层是由c去实现的,不过java和c还是有很多的不同也可以相互调用也就是JNI,我们会在以后去说去. 数据类型 在java中的数据

java基础 02 数据类型、运算符、分支结构

内容: (1)数据类型 (2)运算符 (3)分支结构 1.数据类型 java语言中的基本数据类型:byte.short.int.long.float.double.boolean.char. 1.1布尔类型 在java语言中描述真假信息的类型有:boolean. 该类型变量的数值只有两种:true(真).false(假). 该类型在内存空间中的大小没有明确定义,通常认为是1个字节. 1.2字符类型 在java语言中用于描述单个字符的数据类型有:char 如:'a'.'b'. 其中char类型在内

关于JAVA面向对象基础整理以及个人的理解(适合初学者阅读)

JAVA的基础语法等都跟C有很大的相似之处,所以这里就不多啰嗦了.直接从数组开始. 数组: 1.声明 int [] a; 在声明的过程中,并没有分配空间给数组.我们可以在声明的同时,用new来分配相应的空间 int [] a = new int[100]; 这里开辟了一个空间为100大小的数组,内存分配也完成了. 我们可以在声明的同时也确定元素个数 int [] a = new int[]{1,3,5,7,9}; 面向对象(重点) class Human{ int height; void br

初识八大基本数据类型的包装类——Java面向对象基础(25)

一.总括 * 八大基本数据类型的包装类:将基本数据类型封装了类(引用类型) * 基本数据类型 包装类 * byte -- Byte * short -- Short * int -- Integer * long -- Long * float -- Float * double -- Double * char -- Character * boolean -- Boolean 二.Integer的一些简单的使用 1.其包装类型与基本数据类型使用==比较时 2.创建方式 Integer int

JAVA面向对象基础问答

请简要写出搭建java开发环境的步骤和java跨平台原理. 答: 搭建开发环境步骤:1.下载安装JDK.2.配置path路径.  Java跨平台原理:java针对不同平台开发了不同版本的JVM,不同平台安装上对应版本的JVM之后  使用java代码编写的程序通过一次编译生成统一的字节码文件,就可以在JVM虚拟机中运行  所以只需开发一套使用java代码编写的程序,就可以在不同平台上进行运行,这就是java跨平台原理. int和Integer都可以代表一个整数,这两者在使用上有什么区别吗?为什么J

java面向对象基础知识

一.面向对象与面向过程的区别: ①所处的角色不同:前者指挥者,后者执行者:②所需知道的事情不同:前者知道哪些是做这些事情的人就可以,不需了解具体的事情操作的过程.后者需要具备应有的技能来做这些事情. 二.面向对象的基本操作过程 指挥者采用面向对象思想,通过创建类,来创建统一的属性值[成员属性]和(做事的)方法[成员方法]. 通过创建的类或者jdk已有的类,来创建具体的对象,属性值明确,方法明确. 举例:创建类 1 package com.oracle.demo02; 2 3 public cla

java面向对象基础

思想 面向过程:是分析出解决问题所需的步骤,从上往下步步求精,自顶向下的编程,最重要的是模块化思想,考虑实际的实现 优点:性能高 面向对象:以事物为中心,将事物高度抽象为对象,对象包括属性与行为. 优点:易重用.易扩展.易维护.适合大型项目 联系与区别 联系:面向对象也含有面向过程的思想 区别:面向过程是一件事"该怎么做",面向对象是一件事"该让谁来做" 举例 汽车发动  汽车到站 面向过程  汽车发动与汽车到站分别为两个事件,形成两个函数,依次调用 面向对象  关