IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaSE之数据类型和运算符的总结 -> 正文阅读

[Java知识库]JavaSE之数据类型和运算符的总结

目录

一、数据类型

1.变量和类型

2.整型类型int

?3.长整型long

4.双精度浮点型变量double

5.单精度浮点型变量float

6.字符类型变量char

7.字节类型变量byte

8.短整型变量short

9.布尔类型变量boolean

10.字符串类型变量

11.变量的作用域

12.变量的命名规则

13.常量

14.类型转换

15.数值提升

16.int和string的相互转换

总结:

?二、运算符

1.算术运算符

2.关系运算符

3.逻辑运算符

4.位运算符

5.移位运算符

6.条件运算符

7.运算符的优先级

三、注释


一、数据类型

1.变量和类型

变量指的是程序运行时可变的量 . 相当于开辟一块内存空间来保存一些数据
类型则是对变量的种类进行了划分 , 不同的类型的变量具有不同的特性

2.整型类型int

(1)基本语法形式:int 变量名 = 初始值;

(2)没有所谓的无符号类型,统一都是有符号的,一个 int 变量占 4 个字节,和操作系统没有直接关系。第一位为符号位,其余31位为数值位,所以int的大小范围:-2^31 -> 2^31-1,即-2147483648~2147483647。如果运算的结果超出了 int 的最大范围, 就会出现溢出的情况。

public class DataTyprs{
   public static void main(String[] args){
       int maxValue = Integer.MAX_VALUE;
       int minValue = Integer.MIN_VALUE;

       System.out.println(maxValue);
       System.out.println(maxValue+1);
       System.out.println(minValue);
       System.out.println(minValue);
   }
}
       

编译运行该代码,输出如下:?

?3.长整型long

(1)基本语法形式:long?变量名 = 初始值;建议初值加一个后缀L或l,如:10L或10l

(2)long 类型占 8 个字节. 表示的数据范围 -2^63 -> 2^63-1

public class TestData{
   public static void main(String[] args){
      System.out.println(Long.MAX_VALUE);//9223372036854775807
      System.out.println(Long.MIN_VALUE);//-9223372036854775808
   }
}

4.双精度浮点型变量double

(1)基本语法形式:double?变量名 = 初始值;
(2) Java 中的 double 虽然也是 8 个字节 , 但是浮点数的内存布局和整数差别很大 , 不能单纯的用 2 ^ n 的形式表示数据范 .J ava double 类型的内存布局遵守 IEEE 754 标准 ( C 语言一样 ), 尝试使用有限的内存空间表示可能无限的小数 , 必会存在一定的精度误差 .
public class TestData{
    public static void main(String[] args){
        double num = 1.1;
        System.out.println(num*num);
    }
}
  

编译运行该代码,输出如下:

1.2100000000000002

5.单精度浮点型变量float

(1)基本语法形式:double?变量名 = 初始值;建议初值加一个后缀F或f,如:10.1F或10.1f

(2) float 类型在 Java 中占四个字节 , 同样遵守 IEEE 754 标准 . 由于表示的数据精度范围较小 , 一般在工程上用到浮点数都
优先考虑 double, 不太推荐使用float

6.字符类型变量char

(1)基本语法形式:char 变量名 = 初始值;

(2)Java 中使用 单引号 + 单个字母 的形式表示字符字面值.

(3)计算机中的字符本质上是一个整数. C 语言中使用 ASCII 表示字符, Java 中使用 Unicode 表示字符. 因此一 个字符占用两个字节, 表示的字符种类更多, 包括中文.使用一个字符表示一个汉字,如:char ch = '呵';

7.字节类型变量byte

(1)基本语法格式 : byte 变量名 = 初始值 ;
(2) 字节类型表示的也是整数 . 只占一个字节 , 表示范围较小 ( - 128 - > +127 )
(3) 字节类型和字符类型互不相干

8.短整型变量short

(1)基本语法格式: byte 变量名 = 初始值;

(2)short 占用 2 个字节, 表示的数据范围是 -32768 -> +32767。这个表示范围比较小, 一般不推荐使用。

9.布尔类型变量boolean

(1)基本语法格式: boolean 变量名 = 初始值;

(2)boolean 类型的变量只有两种取值, true 表示真, false 表示假

(3)Java boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法

public class TestData{
   public static void main (String[] args){
       boolean value = true;
       System.out.println(value+1);
   }
}

编译运行该代码,会发现编译错误。value的类型是boolean,1的类型是int。?

(4)boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定。假设有一条4选1的选择题题,这时要去看其他3项有无明显错误

10.字符串类型变量

(1)基本语法格式 : String 变量名 = " 初始值";
(2) Java 使用 双引号 + 若干字符 的方式表示字符串字面值 . 如:String str = "Hello";
(3) 和上面的类型不同 , String 不是基本类型 , 而是 引用类型
(4) 字符串中的一些特定的不太方便直接表示的字符需要进行转义
一些常见的转义字符
转义字符解释
\n换行
\t水平制表符
\'单引号
\"双引号
\\反斜杠

(5)字符串使用“+”表示字符串的拼接(当一个 + 表达式中存在字符串的时候, 都是执行字符串拼接行为

System.out.println("hello"+"world");//helloworld

字符串和其他数据类型使用“+“拼接,结果就是一个字符串,如:

System.out.println("hello"+10+20);//hello1020

但是也有一些特例:

System.out.println(10+20+"hello");//30hello? 这是因为括号里的式子从左往右计算,所以会先加起来等于30再与hello拼接为30hello

那么如何才能打印出hello30和1020hello呢?

System.out.println("hello"+(10+20));//hello30? ?加一个括号,就会先进行加法,再进行拼接啦

System.out.println(10+""+20+"hello");//1020hello? ?""是一个空字符串,10+""就拼接为一个字符串"10","10"再和20拼接为字符串"1020",最后"1020"与"hello"拼接为“1020hello”

11.变量的作用域

也就是该变量能生效的范围 , 一般是变量定义所在的代码块 ( 大括号 )
public class TestData{   
      public static void main(String[] args) { 
          { 
              int x = 10; 
              System.out.println(x); // 编译通过; 
          } 
          System.out.println(x); // 编译失败, 找不到变量 x. 
      } 
}

12.变量的命名规则

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

13.常量

?常量指的是运行时类型不能发生改变。常量主要有以下两种表现形式:

(1)字面值常量

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 字面值常量 , 双引号中可以有多个字符
(2)final 关键字修饰的常量

不能在程序运行过程中发生修改.

public class TestData{
    public static void main(String[] args){
        final int a = 10;
        a = 20;
    }
}

14.类型转换

Java 作为一个强类型编程语言 , 当不同类型之间的变量相互赋值的时候 , 会有教严格的校验
(1) int long/double 相互赋值
public class TestData{
    public static void main(String[] args){
        int a = 10; 
        long b = 20; 
        double c = 30.0;
  
        a = b; // 编译出错, 提示可能会损失精度,也许我们会想int还放不下一个小小的20吗?这是因为b是一个变量,程序运行时才知道b的值,所以在编译时不知道b的值,所以编译出错
        b = a;//编译通过
        a = c; // 编译出错, 提示可能会损失精度
        c = a;//编译通过
    }
}
不同数字类型的变量之间赋值 , 表示范围更小的类型能隐式转换成范围较大的类型 , 反之则不行

(2)int boolean 相互赋值?

public class TestData{
    public static void main(String[] args){
         int a = 10; 
         boolean b = true; 

         b = a; // 编译出错, 提示不兼容的类型
         a = b; // 编译出错, 提示不兼容的类型
    }
}
int boolean 是毫不相干的两种类型 , 不能相互赋值
(3)int字面值常量 给 byte 赋值
public class TestData{
    public static void main(String[] args){
        byte a = 100; // 编译通过
        byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失    byte 表示的数据范围是 -128 -> +127
    }
}
使用字面值常量赋值的时候 , Java 会自动进行一些检查校验 , 判定赋值是否合理
强制类型转换:
(1)强制类型转换可能会导致精度丢失
(2)强制类型转换不是一定能成功 , 互不相干的类型之间无法强转
public class TestData{
    public static void main(String[] args){
       int a = 0; 
       double b = 10.5; 
       a = (int)b; //精度丢失,10.5会变成10

       int c = 10; 
       boolean d = false; 
       d = (boolean)c;// 编译出错,提示不兼容类型
    }
}

15.数值提升

(1)int和long的混合运算

public class TestData{
    public static void main(String[] args){
        int a = 10; 
        long b = 20; 
        int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
        long d = a + b; // 编译通过
    }
}

CPU在进行>4byte的数据的运算时,会将范围小的数据提升为范围大的数据,如上面的代码,当 int long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换

(2)byte和byte的运算

public class TestData{
    public static void main(String[] args){
       byte a = 1;
       byte b = 2;
       byte c = a + b;
       byte d = 1 + 2;
    
       System.out.println(c);//编译报错,原因:不兼容的类型: 从int转换到byte可能会有损失
       System.out.println(d);//3  1和2都是字面值常量,在程序编译时,已经被编译为3了
    }
}

?由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte short 这种低于4个字节的类型, 会先提升成 int, 再参与计算

可以修改为byte c = (byte)(a+b);

16.int和string的相互转换

int---->String

valueOf() 方法用于返回给定参数的原生 Number 对象值,参数可以是原生数据类型, String等

public class TestData{
    public static void main(String[] args){        
        int num = 10;
        //方法一:
        String ret = String.valueOf(num);
        //方法二:
        String str = num + "";
        System.out.println(ret);
        System.out.println(str);
    }
}

编译运行该代码,输出如下:

10

10

String------>int

public class TestData{
    public static void main(String[] args){   
        String str = "100"; 
        int num = Integer.parseInt(str);
          
        System.out.println(num);
    }
}

编译运行该代码,输出如下:

100

总结:

?

?二、运算符

1.算术运算符

(1)基本运算符? +? -? *? /? %

这里值得注意的是/和%:

对于/:int/int=int,诸如1/2这样的计算要用double;0不能作除数,否则会抛出异常,后面的代码都不会执行

对于%不仅仅可以对 int 求模, 也能对 double 来求模。注意以下3个式子:

? ? ? ? ? ? ? -10%3? ? ?10%-3? ? ?-10%-3,没错它们的答案分别是-1,1,-1

(2)增量赋值运算符 += -= *=? /= %=

public class TestData{
    public static void main(String[] args){ 
       short s = 10;
       
       s = (short)(s+9);
       y += 9;
       System.out.println(s);
       System.out.println(y);
    }
}

? 编译并运行该代码,输出如下:

19?

19

可以看到增量赋值运算符会完成自动类型转换

(3)自增/自减运算符? ?++/?--

①如果不取自增运算的表达式的返回值 , 则前置自增和后置自增没有区别 .
②如果取表达式的返回值 , 则前置自增的返回值是自增之后的值 , 后置自增的返回值是自增之前的值

2.关系运算符

关系运算符主要有:==? ? ?!=? ? <? ? ?>? ? ?<=? ? ? >=

关系运算符的表达式返回值都是 boolean 类型
public class TestData{
    public static void main(String[] args){
       System.out.println(10 > 20);
    }
}

编译运行该代码,输出如下:

false

3.逻辑运算符

逻辑运算符的操作数 ( 操作数往往是关系运算符的结果 ) 和返回值都是boolean
逻辑运算符主要有? ?&&? ? ? ||? ? ? ?!
表达式1&&表达式2:表达式1和表达式2均为布尔表达式? ? ? ? 两个操作数都为 true, 结果为 true, 否则结果为 false
表达式1||表达式2:表达式1和表达式2均为布尔表达式? ? ? ? ?? 两个操作数都为 false, 结果为 false, 否则结果为 true
!表达式:表达式为布尔表达式? ?? 操作数为 true, 结果为 false; 操作数为 false, 结果为 true( 这是个单目运算符 , 只有一个操作数 )
&& || 遵守短路求值的规则:
(1) 对于 && , 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式
(2)对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式

4.位运算符

位运算符主要有:&? ? ?|? ? ?~? ? ?^
位操作表示 按二进制位运算 . 计算机中都是使用二进制来表示数据的 (01 构成的序列 ), 按位运算就是在按照二进制位的每一位依次进行计算.
&:对应位都是1,结果就是1
|:对应位如果有1,结果就是1
^: 一样的是0,不一样的1
~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
& | 的操作数为整数 (int, short, long, byte) 的时候 , 表示按位运算 , 当操作数为 boolean 的时候 , 表示逻辑运算.

5.移位运算符

移位运算符有3个:>>? ? <<? ? ?>>>? ? ?都是按照二进制位来运算

左移 << : 最左侧位不要了 , 最右侧补 0
右移 >> : 最右侧位不要了 , 最左侧补符号位 ( 正数补 0, 负数补 1)
无符号右移 >>>: 最右侧位不要了 , 最左侧补 0.
注意:
(1)左移 1 , 相当于原数字 * 2. 左移 N , 相当于原数字 * 2 N 次方 .
(2)右移 1 , 相当于原数字 / 2. 右移 N , 相当于原数字 / 2 N 次方 .
(3)由于计算机计算移位效率高于计算乘除 , 当某个代码正好乘除 2 N 次方的时候可以用移位运算代替 .
(4)移动负数位或者移位位数过大都没有意义

6.条件运算符

表达式 1 ? 表达式 2 : 表达式 3? ? ? ? ? ? ? ?表达式1为布尔表达式
Java 中唯一的一个 三目运算符 , 是条件判断语句的简化写法

7.运算符的优先级

运算符之间是有优先级. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可。如:

System.out.println(10 < 20 && 20 < 30);

此时明显是先计算的 10 < 20 20 < 30, 再计算 &&. 否则 20 && 20 这样的操作是语法上有误的 (&& 的操作数只能是
boolean).

三、注释

注释是为了让代码更容易被读懂而附加的描述信息. 不参与编译运行, 但是却非常重要

1.Java 中的注释主要分为以下三种:
? 单行注释:// 注释内容(用的最多)
多行注释:/* 注释内容*/(不推荐)
文档注释: /** 文档注释 */(常见于方法和类之上描述方法和类的作用),可用来自动生成文档 ?
2.注释规范:
(1)内容准确 : 注释内容要和代码一致 , 匹配 , 并在代码修改时及时更新 .
(2)篇幅合理 : 注释既不应该太精简 , 也不应该长篇大论 .
(3)使用中文 : 一般中国公司都要求使用中文写注释 , 外企另当别论 .
(4)积极向上 : 注释中不要包含负能量 ( 例如 领导 SB ).

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章           查看所有文章
加:2022-01-29 22:56:59  更:2022-01-29 22:59:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:22:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码