Java基础(一)基本数据类型与运算符

基本数据类型介绍

Java 的基本数据类型共有 8 种,分为两类:boolean 类型和数值类型,数值类型又可以分为整数类型、字符类型、浮点类型。

整数类型

  • byte:1个字节,范围:(-2^7) ~ (2^7-1)
  • short:2个字节,范围:(-2^15) ~ (2^15-1)
  • int:4个字节,范围:(-2^31) ~ (2^31-1)
  • long:8个字节,范围:(-2^63) ~ (2^63-1)

int 是最常用类型,通常情况下,直接给出一个整数值默认就是 int 类型,例如:

//128会被系统默认当成int类型,然后赋值给变量a
int a = 128;   

有两种特殊情况必须指出:

  • 将一个较小的整数值(在 byte 或 short 类型范围内)赋给一个 byte 或 short 变量,系统会自动把将 int 类型转换为 byte 或者 short 类型来处理。
  • 将一个巨大的整数值(超出了 int 类型范围)赋予 long 类型,系统不会自动将它转换为 long 类型来处理,必须在整数值后加 l 或者 L 作为后缀。
//代码正确,系统自动把56转换byte类型
byte a = 56;  

//代码错误,整数值超过int类型范围
long bigValue1 = 99999999999999999;
//代码正确,在整数值后添加L,强制使用long类型
long bigValue2 = 99999999999999999L;  

注意:将一个整数值(int 类型范围内)赋给 long 类型,编译可以通过,这不是特殊情况,这是自动类型转换。

//99是int类型,赋值时,自动类型转换为long类型
long bigValue3 = 99;  

整数值表示形式:

  • 十进制:平常使用数值
  • 二进制:以 0b 或者 0B 开头
  • 八进制:以 0 开头
  • 十六进制:以 0x 或者 0X 开头,其中 10 ~ 15 以 a ~ f 或者 A ~ F 来表示
//十进制212的各种表示方式
int binVal = 0b11010100;  //二进制
int octalVal = 0324;      //八进制
int hexVal = 0xd4;        //十六进制

注意:二进制或者十六进制表现的是整数在内存中的存储形式(补码),默认的二进制整数值是 32 位,最高位(第 32 位)为符号位。

int binVal = 0B10000000000000000000000000000011;
//-2147483645,最高符号位为第32位,为负数
System.out.println(binVal); 

//整数值默认为int,最高符号为第32位,为正数
byte binVal2 = (byte)0b11101001;
//-23,强制转换后,最高符号位为第8位,为负数
System.out.println(binVal2);  

//二进制后缀加L,代表整数值为long类型
long binVal3 = 0B10000000000000000000000000000011L;
//2147483651,最高符号位为第64位,为正数
System.out.println(binVal3); 

字符类型

char 类型是 16 位 Unicode 编码字符,本质上是 16 位无符号整数,可以将 0 ~ (2^16-1) 范围内的 整数值直接赋给 char 类型变量,系统会自动将 int 类型转换为 char 类型。

字符型值表示形式:

  • 单个字符,‘A‘,‘9‘ 等
  • 转义字符,‘\n‘,‘\t‘ 等
  • 使用 Unicode 值,格式为 ‘\uXXXX‘,其中 XXXX 代表一个十六进制整数,范围为 ‘\u0000‘ ~ ‘\uFFFF‘,其中前 256 个(‘\u0000‘ ~ ‘\u00FF‘)字符和 ASCII 码中的字符完全重合。
char aChar = 'a';       //单个字符
char enterChar = '\r';  //转义字符
char ch = '\u9999';     //Unicode编码
char c = 97;            //给char类型变量赋值整数值
int zhongValue = '疯';  //char类型自动转换为int

浮点类型

  • float:4 个字节(32 位),第 1 位是符号位,接下来 8 位是指数,再接下来 23 位是尾数
  • double:8 个字节(64 位),第 1 位是符号位,接下来 11 位是指数,再接下来 52 位是尾数

浮点型表示形式:

  • 十进制:平常使用数值,例如 3.14。必须包含小数点,要不然会被当成 int 类型
  • 科学计数法:例如 3.14e2 或者 3.14E2(即 3.14 * 10^2)

double 是最常用类型,通常情况下,直接给出一个浮点数值默认是 double 类型,如果希望当成 float 类型处理,在浮点数值后加 f 或 F。

//代码正确,3.14被系统默认当成double类型,然后赋值给a
double a = 3.14;
//代码错误,3.14默认为double类型,不能直接赋给float类型
float b = 3.14;
//代码正确,3.14f为float类型
float c = 3.14f;  

特殊浮点数值:

  • 正无穷大:Double 类或 Float 类的 POSITIVE_INFINITY,正数除以 0
  • 负无穷大:Double 类或 Float 类的 NEGATIVE_INFINITY,负数除以 0
  • 非数:Double 类或 Float 类的 NaN,0.0 除以 0.0 或对一个负数开方
double a = 3.14;
System.out.println(a/0);  //Infinity

int b = 4;
System.out.println(b/0);   //报错

布尔类型

boolean 类型只有 true 和 false 两种类型,不能用 0 或者非 0 代替,其他类型值不能转换为 boolean 类型,这和 C++ 是不同的。Java 没有强制规定 boolean 类型所占内存空间,一般为 8 位。

boolean b1 = true;
boolean b2 = false;

System.out.println(b1 + "-" + b2);  //true-false

基本类型的类型转换

Java 抛开 boolean 类型外的 7 种数值类型可以相互转换,有两种转换方式:自动类型转换和强制类型转换。

自动类型转换

把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统会进行自动类型转换,无需其他操作。可以想象成有两瓶水,当把小瓶里的水倒入大瓶中时不会有任何问题。

上图中,箭头左边的数组类型可以自动转换右边的数组类型。

byte c = 2;
//byte类型自动转换为double
double d = c;
System.out.println(d);  //2.0

强制类型转换

把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量,需要强制类型转换。转换过程可能会数据丢失,可以想象成把一个大瓶子里的水倒入一个小瓶子,如果大瓶子里的水不多还好,但如果大瓶子里的水很多,将会引起溢出,从而造成数据丢失。

int iValue = 233;
//将int类型强制转换为byte类型
byte bValue = (byte) iValue;
System.out.println(bValue);  //-23

表达式类型的自动提升

当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生以下自动提升:

  • 所有的 byte 类型、short 类型和 char 类型将被提升到 int 类型;
  • 算术表达式的结果类型自动提升到与表达式中最高等级操作数相同的类型。
short sValue = 5;
//错误,sValue是short类型,在表达式中自动提升到int类型,数值2默认是int类型,
//sValue-2整个表达式结果类型为int,不能赋给short类型
sValue = sValue - 2;
short value = 3;
//正确,value被自动提升到int类型,23也是int类型,整个表达式结果为int类型
int initResult = 23/value;

运算符

自增和自减运算符

  • ++ :操作数值型变量,++ 放操作数左边,操作数自身加 1,返回加 1 后的结果;++ 放操作数右边,操作数自身加 1, 返回加 1 前的结果;
  • -- :操作数值型变量,-- 放操作数左边,操作数自身减 1,返回减 1 后的结果;-- 放操作数右边,操作数自身减 1, 返回减 1 前的结果;
int c = 5;
int d = ++c;
System.out.println(a);  //6
System.out.println(d);  //6

int a = 5;
int b = a++;
System.out.println(a);  //6
System.out.println(b);  //5

位运算符

  • & :按位与
  • | :按位或
  • ~ :按位非(键盘数字 1 左边键)
  • ^ :按位异或
  • << :左移运算符
  • >>:右移运算符
  • >>>:无符号右移运算符

需要记住一点,位运算操作的是数值在计算机存储的二进制码(补码)

System.out.println(5 & 9);   //1
System.out.println(5 | 9);   //13
System.out.println(~-5);     //4
System.out.println(5^9);     //12


左移运算符是将操作数的二进制码整体左移指定位数,左移后右边空出来的位以 0 填充,左移 n 位,相当于乘以 2 的 n 次方。

System.out.println(5 << 2); //20
System.out.println(-5 << 2);  //-20

右移运算符有两个:>>>>>

  • 对于 >> 运算符而言,将操作数的二进制码右移指定位数后,左边空出来的位以原来的符号位填充,即如果操作数原来是正数,则左边补 0;如果操作数是负数,则左边补 1。因此,右移 n 位,相当于除以 2 的 n 次方。
  • >>> 是无符号右移运算符,将操作数的二进制码右移指定位数后,左边空出来的位全补 0 。
System.out.println(-5 >> 2);  //-2
System.out.println(-5 >>> 2);  //1073741822


进行移位运算的规则:

  • 对于 byte、short 或 char 类型的操作数会先自动类型转换为 int 类型后再移位;
  • 对于 int 类型的整数移位 a>>b,当 b > 32时,系统先用 b 对 32 求余(因为 int 类型只有 32 位),得到的结果才是真正移位的位数;
  • 对于 long 类型的整数移位 a>>b,当 b > 64时,先用 b 对 64 求余,得到的结果才是真正移位的位数。

运算符优先级

运算符说明 Java 运算符
分隔符 . [] () {} , ;
单目运算符 ++ -- ~ !
强制类型转换运算符 (type)
乘法/除法/求余 * / %
加法/减法 + -
移位运算符 << >> >>>
关系运算符 < <= >= > instanceof
等价运算符 == !=
按位与 &
按位异或 ^
按位或 |
条件与 &&
条件或 ||
三目运算符 ? :
赋值 = += -= *= /= &= |= ^= %= <<= >>= >>>=

记住 && 和 || 优先级顺序技巧:将 && 看成一般算式的乘法,一般算式中乘法优先级最高,所以 && 优先级比 || 高。

原文地址:https://www.cnblogs.com/zongmin/p/11331971.html

时间: 2024-10-01 19:20:24

Java基础(一)基本数据类型与运算符的相关文章

java 基础笔记 基本数据类型对象包装类

基本数据类型对象包装类: 为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作. 用于描述该对象的类就称为基本数据类型对象包装类. 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char   Character boolean Boolean 该包装对象主要用于基本类型和字符串之间的转换. 基本类型-->字符串 1.基本类型数据+"&quo

java基础随笔 字符数据类型char的单引号

public class Love{ public static void main(String[] args){ System.out.println('*'+'\t'+'*'); System.out.println("*"+"\t"+"*") } } 运行结果   第一行为  93 第二行为  *        * 原因 第一行中'\t' 单引号  识别为字符数据类型char,char类型是可以运算的,在第一行中+做了运算符. 第二行&q

Java基础篇—基本数据类型

八种数据类型 数值型: 整数型:byte.shot.int.long byte:长度为28(-27~27-1) shot:长度为216(-215~215-1) int:长度为232(-231~231-1) long:长度为264(-263~263-1) 浮点型:float.double float:长度为232(初始化需要在小数后面加f,例:float num=3.14f) double:长度为264(初始化两种形式均可,例1:double num=3.1415926d:例2:double nu

Java基础学习第三天——运算符与流程控制语句

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.02.22 lutianfei none 运算符 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三目运算符 算术运算符 * 注:整数相除只能得到整数,若想得到小数,只需将任意一个数据变为浮点数. * eg:System.out.println(x*1.0/y); ++,– : 放在操作数前面,先自增或者自减,然后再参与运算. 放在操作数后面,先参与运算,再自增或者自减. 练习题1: int a=10,b=1

Java基础 - 第二天 Eclipse、运算符、Scanner类

第1章    Eclipse 1.1     Eclipse概述 l 概述 Eclipse是一个专门针对Java的集成开发工具(IDE),是IBM公司的产品.是免费.开源.由Java语言编写.所以,需要有JRE运行环境并配置好环境变量.它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中,使用的就是Eclipse进行开发. l 特点描述 n 免费 n 纯Java语言编写 n 免安装 n 扩展性强 l 下载和安装 n 下载 http://eclipse.org/ n 安装 绿色版 解压

Java基础 (2) - 基本数据类型及包装类

关键字位数.常量池.包装类(自动装拆箱) 8种基本数据类型整数类型:byte,short,int,long浮点数类型:float,double字符类型:char布尔类型:boolean 位数1.JVM规范中,boolean作为int处理,占4字节 ,boolean数组当做byte数组,占1个字节.2.byte类型是1byte也就是8位,可以表示的数字是-128到127,因为还有一个0,加起来一共是256. 包装类能解决1.基本类型并不具备对象的特性: 没有成员变量,方法可以调用.2.不支持面向对

java基础(4):引用数据类型、流程控制语句

1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型  变量名  =  new 数据类型(); 每种引用数据类型都有其功能,我们可以调用该类型实例的功能. 变量名.方法名(); Scanner类 Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据. Scanner使用步骤:

Java基础——变量、数据类型

一 .变量 1.计算机的内存类似于人的大脑,计算机使用内存来记忆大量运算时要使用数据.内存是一个物理设备,如何来存储一个数据呢?很简单,把内存想象成一间旅馆,要存储的数据就好比要住宿的客人. 首先,旅店的服务人员会询问要住什么样的房间,如:单人间.双人间.总统套间:然后,根据选择的房间类型,服务员会安排合适的房间.“先开房间,后住”就描述了数据存入内存的过程. 首先,根据数据类型的类型为它在内存中分配一块空间(即找一个合适的房间),然后数据就可以放进这个空间(即入住). 那么为什么对存储空间有要

Java基础——变量及数据类型

每种语言中都会设计到许多数据,于是,你会接触到不同的数据类型,初次接触数据类型是也曾晕晕乎乎,在java语言中,终于有点明白了,梳理一下,与君共勉. 变量的概念 内存中的一个存储区域 变量名+数据类型 可在同一类型范围内不断变化 为什么定义变量: 用于不断的存放同一类型的常量,并可以重复使用 使用变量注意: 变量的作用范围,一对{}之间有效 初始化值 定义变量的格式: 数据类型   变量名=初始化值 eg: int x = 4 注:格式固定 理解:变量就如同数学中的未知数. 数据类型: 整数默认

《java开发实战经典》读书笔记——第3章 Java基础程序设计之数据类型划分20151026

数据类型 基础数据类型 数值型 整数类型 浮点类型 字符型 布尔型 引用数据类型 类 接口 数组