JAVA 关于变量和数据类型与运算符

首先,因为变量要保存数据,因此需要一块空间来存储,而这块空间就在“内存”上。

其次,变量必须先定义,再被赋值或者让初始化,才能被使用

那么在JAVA中,变量有哪些形态呢?

  ※在JAVA中没有无符号类型!!!

  以及数据有哪些类型呢?

  那么,下面就来一一介绍一下这些类型。

1. 整型变量
 
•基本语法格式: int 变量名 = 初始值;  初始化操作是 可选的 , 但是 建议 创建变量的时候都显式初始化
•在 Java 一个 int 变量占 4 个字节和操作系统没有直接关系。 而 4 个字节表示的数据范围是 -2^31 -> 2^31-1 , 也就大概是 -21亿 到 +21亿
•可通过以下代码查看 Java 中的整型数据范围 :
System.out.println(Integer.MAX_VALUE);  // int 的最大值
System.out.println(Integer.MIN_VALUE);  // int 的最小值

 ※如果运算的结果超出了 int 的最大范围,就会出现溢出的情况。

// Integer 是int的包装类,'.'相当于"的"。
int maxValue = Integer.MAX_VALUE;
System.out.println(maxValue+1);
int minValue = Integer.MIN_VALUE;
System.out.println(minValue-1);

2.长整型变量

•基本语法格式:  long 变量名 = 初始值; 例如:
long num = 10L;

 初始化设定的值为 10L,表示一个长整型的数字,10l 也可以。使用 10 初始化也可以,10 的类型是 int,10L 的类型是 long,使用 10 L 或者 10 l 更好一些。

•Java 中 long 类型占 8 个字节。表示的数据范围 -2^63 -> 2^63-1

•我们依然可以使用以下代码查看 Java 中的长整型数据范围 :
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
   
// 运行结果
9223372036854775807
-9223372036854775808

 这个数据范围远超过 int 的表示范围,足够绝大部分的工程场景使用。

3. 双精度浮点型变量
 
•基本语法格式: double 变量名 = 初始值; 
在 Java 中, int 除以 int 的值仍然是 int( 直接舍弃 小数部分 );如果想得到 带小数的结果 需要使用 double 类型计算。
•Java 中的 double 虽然也是 8 个字节, 但是 浮点数的内存布局 和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范围。Java 的 double 类型的内存布局依然遵守 IEEE 754 标准 ( C 语言一样 ), 尝试使用有限的内存空间表示可能无限的小数, 势必会 存在一定的精度误差
 
4. 单精度浮点型变量
 
•基本格式: float 变量名 = 初始值;
•float 类型在 Java 中占 四个字节, 同样 遵守 IEEE 754 标准 由于表示的数据 精度范围较小 , 一般在工程上用到浮点数都 优先考虑 double, 不太推荐使用 float。
 
5. 字符类型变量
 
•基本格式: char 变量名 = 初始值;
Java 中使用 单引号 + 单个字母 的形式表示字符 字面值  
•计算机中的字符 本质上 是一个 整数 C 语言中使用 ASCII 表示字符; Java 中 使用 Unicode 表示字符, 因此一个字符占用 两个字节, 表示的字符 种类更多 包括中文。
 
char ch = 'A';
char ch = '呵';
System.out.println(ch);

6.字节类型变量

•基本语法格式: byte 变量名 = 初始值;
字节类型表示的 也是整数。 只占 一个字节, 表示范围较小 ( -128 ~ +127 )。
•字节类型和字符类型 互不相干
 
7. 短整型变量
 
•基本语法格式: short 变量名 = 初始值;
•short 占用 2 个字节, 表示的数据范围是 -32768 -> +32767。
•这个表示范围比较小, 一般不推荐使用。
 
8. 布尔类型变量
 
•基本语法格式: boolean 变量名 = 初始值;
•boolean 类型的变量 只有两种取值, true 表示真, false 表示假。
•Java 的 boolean 类型和 int 不能 相互转换, 不存在 1 表示 true,0 表示 false 这样的用法。
•boolean 类型有些 JVM 的实现是占 1 个字节 有些是占 1 个比特位, 这个没有明确规定。
 
字符串类型变量
•基本语法格式: String 变量名 = "初始值";
•Java 使用 双引号 + 若干字符 的方式表示字符串 字面值
•和上面的类型不同 , String 不是 基本类型 , 而是 引用类型
•字符串中的一些特定的不太方便直接表示的字符需要进行转义。转义字符示例:
// 创建一个字符串 My name is "张三"
String name = "My name is \"张三\"";
转义字符有很多 , 其中几个比较常见的如下 :
转义字符解释
\n换行
\r回到行首
\t水平制表符
\'单引号
\"双引号
\\反斜杠
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
•字符串的 + 操作, 表示 字符串拼接
String a = "hello";
String b = "world";
String c = a + b;
System.out.println(c);

•还可以将字符串和整数进行拼接:

String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);

// 执行结果
result = 1020

变量的作用域

也就是该变量 能生效的范围 一般是变量定义所在的 代码块 (大括号) 。举个例子:
 
class Test {
   public static void main(String[] args) {
      {
           int x = 10;
           System.out.println(x); // 编译通过;
      }
       System.out.println(x); // 编译失败, 找不到变量 x.
  }
}
class Test {
   public static void main(String[] args) {
      {
           int x = 10; // 这里定义了一个变量 x,类型是 int,值是 10
           System.out.println(x); // 会打印 10
      }
       
      {
           double x = 20.0; // 这里又定义了一个变量 x,类型是 double,值是20.0
                            // 和上面的变量完全无关,只是用到的符号(变量名)相同

变量的命名规则

•硬性指标:
1. 一个变量名 只能包含 数字, 字母, 下划线;
2. 数字 不能开头;
3. 变量名是大小写敏感的, num Num 是两个不同的变量。
注: 虽然语法上 允许 使用中文 / 美元符 ($) 命名变量, 但是  不推荐 使用。
 
•软性指标:
1. 变量命名要具有描述性, 见名知意
2. 变量名不宜使用拼音 ( 但是不绝对 );
3. 变量名的词性推荐使用名词
4. 变量命名推荐 小驼峰命名法  ( 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写)。
 

字面量和常量

•字面值:
10        // int 字面值常量 ( 十进制 )
010     // int 字面值常量 ( 八进制 ) 由数字 0 开头 . 010 也就是十进制的 8
0x10    // int 字面值常量 ( 十六进制 ) 由数字 0x 开头 . 0x10 也就是十进制的 16
10L     // long 字面值常量 . 也可以写作 10l ( 小写的 L)
1.0       // double 字面值常量 . 也可以写作 1.0d 或者 1.0D
1.5e2   // double 字面值常量 . 科学计数法表示 . 相当于 1.5 * 10^2
1.0f      // float 字面值常量 , 也可以写作 1.0F
true      // boolen 字面值常量 , 同样的还有 false
'a'         // char 字面值常量 , 单引号中只能有一个字符
"abc"   // String 字面值常量 , 双引号中可以有多个字符
 
•final 关键字修饰的常量,常量 不能 程序运行过程中 发生 修改
 

※类型转换

Java 作为一个 强类型 编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。因此, 不同 数字类型 的变量之间赋值,表示范围 更小的 类型 能隐式转换 范围较大的 类型, 反之则不行 int 和 boolean 毫不相干的两种类型, 不能 相互赋值。还有在 int 字面值常量 给 byte 赋值时,因为 byte 表示的数据范围是: -128 -> +127,因此在赋值时必须考虑范围问题。
 

※使用强制类型转换

int a = 0;
double b = 10.5;
a = (int)b;

int a = 10;
boolean b = false;
b = (boolean)a; // 编译出错,提示不兼容的类型。
•使用 (类型) 的方式可以将 double 类型强制转成 int。 但是强制类型转换可能会导致 精度丢失。
•强制类型转换 不是一定能成功, 互不相干的类型之间 无法 强转。
 

※数值提升

当 int long 混合运算的时候, int 提升 long, 需要使用 long 类型的变量来接收结果。如果非要 int 来接收结果, 就需要 使用强制类型转换
byte byte 都是相同类型, 但是出现编译报错。这是因为计算时会 先将 byte类型  提升 int类型 再进行计算, 得到的 结果也是 int  这是由于计算机的 CPU 通常 按照 4 个字节为单位 从内存中读写数据, 为了硬件上实现方便 byte 和 short 这种 低于 4 个字节的类型, 会先提升 int, 再参与计算。
 

※ int String 之间的相互转换(类比方法!)

•int 转成 String:
int num = 10;
//方法1
String str1 = num + "";
//方法2
String str2 = String.valueOf(num);
•String 转成 int:
String str = "100";
int num = Integer.parseInt(str);

打印输出

System.out.println(msg);            // 输出一个字符串, 带换行
System.out.print(msg);              // 输出一个字符串, 不带换行
System.out.printf(format, msg);     // 格式化输出(和C语言的printf的用法基本一致)
System.out.format(format, msg);     // 完全等同于 printf

※运算符

名称内容
赋值运算符=
算数运算符+  -  *  / (0不能作为除数)  %  +=  -=  *=  /=  %=  ++ (如果取表达式的返回值,则前置自增的返回值是自增之后的值,后置自增的返回值是自增之前的值)  --
关系运算符==  !=  <  >  <=  >==
逻辑运算符&&  ||  ! (返回值都是boolean)
位运算符&  |  ~  ^
移位运算符<< (最左侧位不要了,最右侧补0.左移N相当于原数字*2N次方)  >> (最右侧位不要了,最左侧补符号位.右移N,相当于原数字/2N次方)  >>> (无符号右移:最右侧位不要了,最左侧补0)
条件运算符表达式1 ? 表达式2 : 表达式3

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
•  && 和 || 遵守 短路求值 的规则:
1. 对于 &&, 如果 左侧 表达式值 为false, 则表达式的整体的值一定是 false, 无需计算右侧 表达式。
2. 对于 ||, 如果 左侧 表达式值 为true, 则表达式的整体的值一定是 true, 无需计算右侧 表达式。
& | ( 不推荐使用 如果 操作数为 boolean 的时候 也表示逻辑运算。 但是 它们 不支持 短路求值。
 
运算符之间是有优先级的,在可能存在歧义的代码中 加上括号 即可。
 

注释

注释是为了让代码更容易被读懂而附加的描述信息, 不参与编译运行 但是却非常重要。
•Java中的注释主要分为以下三种:
1.单行注释: // 注释内容(用的最多);
2.多行注释: /* 注释内容 */ (不推荐);
3.文档注释: /** 文档注释 */ (常见于方法和类之上描述方法和类的作用 ) ,可用来自动生成文
档。
 

关键字

关键字是 Java 中的一些 具有特定含义 的单词。特别注意,在定义的变量名时 不能 和关键字冲突。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值