从零开始回顾Java---系列二

简介: 基础语法1、Java 有哪些基本数据类型?如图所示:表格总结:数据类型 内存大小 默认值 取值范围byte 1 B (byte)0 -128 ~ 127short 2 B (short)0 -215 ~ 215-1int 4 B 0 -231 ~ 231-1long 8 B 0L -263 ~ 263-1float 4 B 0.0F ±3.4E+38(有效位数 6~7 位)double 8 B 0.0D ±1.7E+308(有效位数 15 位)char 英文 1B,中文 UTF-8 占 3B,GBK 占 2B。 '\u0000' '\u0000' ~ '\uFFFF'

基础语法

1、Java 有哪些基本数据类型?

如图所示:

表格总结:

数据类型

内存大小

默认值

取值范围

byte

1 B

(byte)0

-128 ~ 127

short

2 B

(short)0

-215 ~ 215-1

int

4 B

0

-231 ~ 231-1

long

8 B

0L

-263 ~ 263-1

float

4 B

0.0F

±3.4E+38(有效位数 6~7 位)

double

8 B

0.0D

±1.7E+308(有效位数 15 位)

char

英文 1B,中文 UTF-8 占 3B,GBK 占 2B。

'\u0000'

'\u0000' ~ '\uFFFF'

boolean

单个变量 4B / 数组 1B

false

true、false

注意:JVM 没有 boolean 赋值的专用字节码指令boolean f = false 就是使用 ICONST_0 即常数 0 赋值。单个 boolean 变量用 int 代替,boolean 数组会编码成 byte 数组。

2、自动类型转换、强制类型转换?看看这几行代码?

Java 所有的数值型变量可以相互转换,当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,可以进行自动类型转换;反之,需要强制转换。


这就好像,小杯里的水倒进大杯没问题,但大杯的水倒进小杯就不行了,可能会溢出。

float f=3.4,对吗?

  • 不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4 或者写成float f =3.4F。

short s1 = 1; s1 = s1 + 1;对吗?short s1 = 1; s1 += 1;对吗?

  • 对于 short s1 = 1; s1 = s1 + 1;编译出错,由于 1 是 int 类型,因此 s1+1 运算结果也是 int型,需要强制转换类型才能赋值给 short 型。
  • 而 short s1 = 1; s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short(s1 + 1);其中有隐含的强制类型转换。

3、自动装箱/拆箱是什么?

每个基本数据类型都对应一个包装类,除了 int 和 char 对应 Integer 和 Character 外,其余基本数据类型的包装类都是首字母大写即可。

自动装箱 将基本数据类型包装为一个包装类对象,例如向一个泛型为 Integer 的集合添加 int 元素。

自动拆箱 将一个包装类对象转换为一个基本数据类型,例如将一个包装类对象赋值给一个基本数据类型的变量。

比较两个包装类数值要用 equals ,而不能用 == 。Java可以自动对基本数据类型和它们的包装类进行装箱和拆箱。

4、break ,continue ,return 的区别及作用?

  • break 跳出整个循环,不再执行循环(结束当前的循环体)
  • continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
  • return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)


5、说说自增自减运算?看下这几个代码运行结果?

++和--运算符可以放在变量之前,也可以放在变量之后。

当运算符放在变量之前时(前缀),先自增/减,再赋值;当运算符放在变量之后时(后缀),先赋值,再自增/减。

例如,当 b = ++a 时,先自增(自己增加 1),再赋值(赋值给 b);当 b = a++ 时,先赋值(赋值给 b),再自增(自己增加 1)。也就是,++a 输出的是 a+1 的值,a++输出的是 a 值。

用一句口诀就是:“符号在前就先加/减,符号在后就后加/减”。

int i  = 1;
i = i++;
System.out.println(i);

答案是1。对于JVM而言,它对自增运算的处理,是会先定义一个临时变量来接收i的值,然后进行自增运算,最后又将临时变量赋给了值为2的i,所以最后的结果为1。

int i = 1;
int temp = i;
i++;
i = temp;
System.out.println(i);
int count = 0;
for(int i = 0;i < 100;i++)
{
    count = count++;
}
System.out.println("count = "+count);

答案是0。

和上面的题目一样的道理,同样是用了临时变量,count实际是等于临时变量的值。

6、为什么Integer a=100,b=100时候a==b返回true,而Integer c=1000,d=1000时候c==d返回false?

  • Integer a=100 实际上是执行了 Integer i = Integer.valueOf(100)的操作,Integer类型的范围是-128~127,当满足条件时会放入缓存空间中。
  • c=1000不在-128~127的范围内,则会开辟新的内存地址。所以c==d返回为false
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

7、用最有效率的方法计算2乘以8?

2<<3,位运算,数字的二进制位左移三位相当于乘以2的三次方。

8、&和&&区别,||与|的区别

  1. &&与&区别:两者都表示“与”运算,但是&&运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。而&对所有表达式都得判断
  2. || 与|区别:两者都表示“或”运算,但是||运算符第一个表达式成立的话,后面的表达式不运算,直接返回。而|对所有表达式都得判断


相关文章
|
6月前
|
存储 Java 索引
个人笔记—Java基础—数组
该内容是关于数组的介绍。数组是一种容器,用于存储同类型的多个值。初始化有静态和动态两种方式:静态初始化是在创建时直接指定元素,有完整和简写格式;动态初始化则只指定类型和长度,不给定具体元素。访问数组元素通过索引,从0开始,修改元素是`数组名[索引] = 值`,数组长度是`数组名.length`。遍历数组通常用for循环。内存分配上,类信息和静态数据存放在方法区,栈内存负责方法执行和局部变量,堆内存用于new出的对象和数组,有默认初始值。
43 0
|
6月前
|
Java Windows
Java(二)第一个java程序及环境搭建~
Java(二)第一个java程序及环境搭建~
56 0
|
2月前
|
存储 机器学习/深度学习 安全
Java基础+进阶
本文适合Java入门和复习回顾。内容覆盖JDK下载和hello world、IDEA下载安装配置、类、基本数据类型、方法、修饰符、关键字、面向对象、继承、多态、接口、异常、集合、i/o流、多线程、网络编程、Lambda表达式、接口组成更新、方法引用、函数式接口、 Stream流、 反射、模块化、XML
Java基础+进阶
|
6月前
|
Java 索引
【JAVA基础篇教学】第九篇:Java中Set详解说明
【JAVA基础篇教学】第九篇:Java中Set详解说明
|
6月前
|
Java
Java基础—笔记—方法篇
该内容是关于编程中方法的介绍。方法是实现特定功能的代码块,主要好处是提高代码复用性和维护性。方法定义有三种形式:无参无返回值、有参无返回值和有参有返回值。方法重载是指在同一类中,方法名相同但参数类型或个数不同的多个方法,便于简化调用。参数传递时,基本数据类型在方法内修改不会影响外部,而引用数据类型(除String外)的修改会影响外部。
21 0
|
6月前
|
前端开发 Java 数据库
Java实战项目
Java实战项目
107 2
|
Java 编译器 Linux
java基础 --- java概述
java基础 --- java概述
105 0
|
Java
Java基础--while入门小练习
Java基础--while入门小练习
147 0
Java基础--while入门小练习
【Java基础知识 1】第一个Java程序(Java的第一步)
【Java基础知识 1】第一个Java程序(Java的第一步)
126 0
【Java基础知识 1】第一个Java程序(Java的第一步)
下一篇
无影云桌面