JAVA基础-数据类型和运算符

1、关键字和标识符

1.1、关键字:

Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息,所有的 关键字都是小写。关键字如下:
在这里插入图片描述

1.2、标识符定义:

标识符就是用于给程序中变量、类、方法命名的符号。

1.3、 标识符规则:
  • 标识符不能由字母开头,且只能由字母、数字、下划线、美元符组成
  • 标识符不能是保留字和关键字
  • 标识符不能包含空格
  • 标识符不能包含@、#等其他特殊字符
  • 标识符不能与关键字相同

2、数据类型

2.1、数据类型总共分为两类:

基础数据类型和引用数据类型

2.2、基础数据类型

基础数据类型变量直接保存原始值,变量代表的值就是数值本身,基础数据类型总共包含四大类:

  • 整数类型:byte(1个字节);short(2个字节);int(4个字节);long(8个字节)
  • 浮点类型:float(4个字节);double(8个字节)
  • 字符类型:char(2个字节)
  • 布尔类型:boolean
2.3、数据类型范围:

一个字节在内存占8位,因此

  • 一比特(byte)在内存中占一个字节,因此它的数据范围大小为:-128~127
-128 = -2^7
 127 = 2^7-1
  • 同理,short类型大小为两个字节,在内存中的数据范围大小则为:-32768~32767 (-2^15 ~ 2^15-1)
  • int类型大小为4个字节,数据范围大小:-2147483648~2147483647(-2^31 ~ 2^31-1)
2.4、引用数据类型:

引用数据类型有:类、接口、数组;

引用类型变量保存引用值,引用值代表某个对象的引用,引用值指向对象的内存空间的地址,对象本身则放在这个内存空间中。

2.4.1、 类和接口的定义:
  • 类的定义由关键字class申明:
    在这里插入图片描述
  • 接口的定义由关键字interface申明
    在这里插入图片描述
2.4.2、 数组定义
2.4.2.1、数组有三种定义方式:
  • 动态方式,指定数组长度:int[] arr = new int[5];
  • 静态方式,指定数组元素:int[] arr = new int[]{1,2,3,4,5};
  • 省略格式,直接指定元素赋值:int[] arr = {1,2,3,4,5};
2.4.2.2、数组的基本性质如下:
  • 数组在内存中是一个连续的存储空间
  • 数组是一个容器,可以存储同一数据类型的N个数据;
  • 数组是一个数据结构,是数据结构中访问速度最快的;
  • 数组是直接通过下标进行定位;
  • 数组在定义的时候要定义类型和大小,

3、运算符

3.1、运算符可分为以下几种:
  • 算术运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 类型相关运算符
3.2、算术运算符:
  • 算术运算符包含加(+)、减(-)、乘(*)、除(/)、
  • 取余(%)、自加(++)、自减(–)。
  • 更复杂的可以借助 java.lang.Math下面的工具类完成。
3.3、赋值运算符(=)
3.4、位运算符:
  • 按位与(&)、按位或(|)、按位非(~)、按位异或(^)
  • 左移运算符(<<)、右移运算符(>>)、无符号右移运算符(>>>)。
3.4.1、正数位移运算

计算机数字都是以补码的形式存在的,其中正数的原码=反码=补码

其中正数左移(右移)n位,相当于扩大(缩小)2的n次方倍。

以5为例,5 << 2

  • 将十进制5转换为二进制:0000 0000 0000 0101
  • 取二进制的补码(原码=反码=补码):0000 0000 0000 0101
  • 上一步的补码进行左移两位:0000 0000 0001 0100
  • 转换为十进制为:20
3.4.2、负数位移运算

以-5左移两位为例,-5 << 2

  • 先将-5转换为二进制为: 1000 0000 0000 0101
  • 取二进制反码,最高位符号位不变,其它位取反:1111 1111 1111 1010
  • 上一步的反码加1得到补码:1111 1111 1111 1011
  • 上一步的补码进行左移两位,末位补0:1111 1111 1110 1100
  • 将上一步的补码减1操作,变成原码的反码:1111 1111 1110 1011
  • 将上一步的反码取反则得到原码,最高位符号位不变:1000 0000 0001 0100
  • 变成十进制为:-20
3.4.3、无符号右移,最高位始终以0填充
3.4.4、位移运算注意事项:
  • 对于低于int类型(如byte、short和char)的操作数总是先自动类型转换成int类型后再移位。
  • 对于int类型的整数移位a>>b,当b>32时,系统先用b对32求余(因为Int类型只有32位),得到的结果才是真正移位的位数。
  • 对于long类型的整数移位a>>b,当b>64时,总是先用b对64求余(因为long型是64位),得到的结果才是真正移位的位数。
3.5、比较运算符:大于(>)、小于(<)、等于(==)、小于等于(<=)、大于等于(>=)
3.6、逻辑运算符:短路与(&&)、不短路与(&)、或(||)、不短路或(|)、非(!)、异或(^)。

4、面试知识点


1、基本数据类型和引用数据类型做参数有什么区别?
答:基础数据类型做参数则是值传递,不会改变参数本身。
引用数据类型做参数则是引用传递,可以改变参数本身。


2、数组有没有length()方法?String有没有length()方法?
答:数组没有length方法,length只是数组的一个属性;String有length方法。


3、&和&&的区别?
答:&是不短路与,a++ & b++, a与b都会各自加1。
&&是短路与,a++ && b++, 只有a加1,b++不会运行。


4、int 和 Integer有什么区别。
答:Integer是int的包装类。Integer a=6;(自动装箱,执行了Integer.valueOf方法),int b=a;(自动拆箱,执行了intValue方法)


5、int a=110,b=110,c=150,d=150; a == b? c == d?
答:a == b是true,c==d是false。因为常量池大小范围是(-128~127),当int整数超过范围时,则会new 一个新的Integr对象,所以这个时候两个不同的对象对比返回的肯定是false。当在这个范围时,则直接拿常量池中的值对比,这是引用的是同一个Integr对象,所以返回true。


6、2*8 和 2 << 3哪个运算速度快?
答:2 << 3运算速度更快。目前所jdk有的hash运算基本上都会用位运算代替乘法运算。


7、静态变量和实例变量的区别?
答:静态变量(static修饰)也可以称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝。并且只要程序加载了类的字节码,静态变量就会被分配内存空间。静态变量可以实现让多个对象共享内存;
实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。实例变量只有在创建了实例对象时,才会被分配内存空间。

欢迎各位关注我的JAVAERS公众号,陪你一起学习,一起成长,一起分享JAVA路上的诗和远方。在公众号里面都是JAVA这个世界的朋友,公众号每天会有技术类文章,面经干货,也有进阶架构的电子书籍,如Spring实战、SpringBoot实战、高性能MySQL、深入理解JVM、RabbitMQ实战、Redis设计与实现等等一些高质量书籍,关注公众号即可领取哦。
在这里插入图片描述

发布了9 篇原创文章 · 获赞 39 · 访问量 547

猜你喜欢

转载自blog.csdn.net/qq_36526036/article/details/104563396