java基础之数据结构
java基础
1.Java语言基础(变量的概述及格式)
A:什么是变量
在程序执行的过程中,在某个范围内其值可以发生改变的量(例如:苹果的价格)
变量其实是内存中的一小块区域
B:为什么要定义变量
用来不断的存放同一类型的常量,并可以重复使用
C:变量的定义格式
数据类型变量名 = 变量值 ;
为什么有数据类型
我们都知道,变量其实就是内存中的一小块区域。我们定义一个变量,其实就是开辟了一个内存空间。
如果没有数据类型,那么我们需要开辟多大的内存空间合适呢?
为了解决这种问题,java就给我们提供了不同的数据类型,那么针对不同的数据类型,在内存中分配了不同大小的内存空间。
2.Java语言基础(数据类型的概述和分类)
我们都知道,变量其实就是内存中的一小块区域。我们定义一个变量,其实就是开辟了一个内存空间。
如果没有数据类型,那么我们需要开辟多大的内存空间合适呢?
为了解决这种问题,java就给我们提供了不同的数据类型,那么针对不同的数据类型,在内存中分配了不同大小的内存空间。
基本数据类型的详细讲解
(1):数值型
整数型 字节数 范围
byte 1(8bit) -128 ~ 127
short 2(16bit) -2^15 ~ 2^15 - 1
int 4(32bit) -2^31 ~ 2^31 - 1
long 8(64bit) -2^63 ~ 2^63 - 1
浮点数
float 4(32bit) -3.403*10^38 ~ 3.403*10^38
double 8(64bit) -1.798*10^308 ~ 1.798*10^308
(2):字符型 char 2(16bit) 0 ~ 2^16 - 1 = 65535
(3):布尔型 boolean 1
整数默认是int类型的 , 浮点数默认是double类型的
Java中的默认转换规则(自动类型提升)
(1):boolean类型不能转换为其他的数据类型
(2):byte,short,char—int—long—float—double
(3):byte,short,char之间不转换,他们参与运算首先转换为int类型
3.强制转换
A:强制转换问题的引入
bytea = 3;int b = 4;byte = a + b;
结果为在byte范围.要想将结果赋值给byte类型的变量,就需要使用强制类型转换.
强制类型转换是将大的范围的数据转换成小的范围的数据.
B:强制转换的格式
目标数据类型 变量名=(目标数据类型)(被转换的数据);
C:案例演示
byte+ int 的结果赋值给byte,加强制类型转换
D:强制转换的注意事项
尽量不要使用强制类型转化,因为可能存在损失精度的问题。
3.变量相加和常量相加的区别
A:案例演示
面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
byteb1 = 3;
byteb2 = 4;
byteb3 = b1 + b2;
byteb4 = 3 + 4;
byteb5 = 127 + 1;
常量优化机制:编译器会做一个处理,计算3+4相加的值,如果在byte范围内,那么就不报错,如果不在byte范围内,就报错.
B:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
ASCII- GBK - gb2312 - Unicode - UTF-8
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。
所以,Java中的字符可以存储一个中文汉字
4.字符和字符串参与运算
A:案例演示
System.out.println('a');
System.out.println('a'+ 1);
通过看结果知道'a'的值是多少,由此引出ASCII码表
B:ASCII码表的概述
记住三个值:
'0' 48
'A' 65
'a' 97
C:案例演示
System.out.println("hello"+ 'a' + 1);
System.out.println('a'+ 1 + "hello");
任何数在和字符串进行相加的时候,得到的结果都是一个新的字符串
+号在这里表示的是字符串连接符
5.算术运算符的基本用法
A:什么是运算符
对常量和变量进行操作的符号称为运算符
B:运算符的分类
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三目(元)运算符
C:算数运算符有哪些
+, - , * , / , % , ++ , --
D:案例演示
算数运算符的基本用法
注意事项:
a:整数相除只能得到整数。如果想得到小数,请使用浮点数
b:/获取的是除法操作的商,%获取的是除法操作的余数
%运算结果的符号,取决于参与运算是左边的符号
6.算术运算符++和--的用法
A:++,--运算符的作用
自加(++)自减(--)运算
++:自加。对原有的数据进行+1
--:自减。对原有的数据进行-1
B:案例演示
a:单独使用:int x = 3; x++;
放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
b:参与运算使用:int x = 3; int y = x++;
放在操作数的前面,先自增或者自减,然后再参与运算。
放在操作数的后面,先参与运算,再自增或者自减。
需要注意的是:++在前的时候运算的时候数据类型不发生转换
在进行计算的时候会通过一个中间的变量来进行赋值的操作来进行
7.算术运算符++和--的练习
A:案例演示
请分别计算出a,b,c的值?
inta = 10;
intb = 10;
intc = 10;
a= b++;
c= --a;
b= ++a;
a= c--;
结果 :
a=9
b=10
c=8
B:案例演示
请分别计算出x,y的值?
intx = 4;
inty = (x++) + (++x) + (x*10);
x=6, y=70
8.赋值运算符的基本用法
A:赋值运算符有哪些
=, +=,-=,*=,/=,%=
B:案例演示
赋值运算符的基本用法
inta = 34;
a+= 26;
注意事项:
a:基本的赋值运算符:=
把=右边的数据赋值给左边。
b:扩展的赋值运算符:+=,-=,*=,/=,%=
+=把左边和右边做加法,然后赋值给左边。
c:赋值运算符要求左边的数据必须是一个变量
5=3;
9.赋值运算符的面试题
A:案例演示
面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
shorts = 1 ; s = s+1;
shorts = 1 ; s += 1;
B:注意事项
关于几个扩展的赋值运算符,存在一个隐式的强制类型转换.
10.关系运算符的基本用法及其注意事项
A:关系运算符有哪些
==,!= , < , > , <= , >= , instanceof(后面讲解)
注意事项:
无论你的操作是简单还是复杂,结果是boolean类型。
"=="不能写成"="。
"<="表示的是小于或者等于
B:案例演示
关系运算符的基本用法
11.逻辑运算符的基本用法
A:逻辑运算符有哪些
&(并且) , |(或者) , !(非) ,^(异或) , &&(短路与) , ||(短路或)
注意事项:
a:逻辑运算符一般用于连接boolean类型的表达式或者值。
在Java中我们要表示一个数大于3并且小于6,不可以写成3<x<6,应该写成 x>3& x<6 。
b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
算术表达式:a + b
关系表达式:a == b
B:案例演示
逻辑运算符的基本用法
C:结论:
&逻辑与:有false则false。
|逻辑或:有true则true。
^逻辑异或:相同为false,不同为true。
!逻辑非:非false则true,非true则false。
特点:偶数个不改变本身。
12.逻辑运算符&&和&的区别
A:案例演示
&&和&的区别?
a:最终结果一样。
b:&&具有短路效果。左边是false,右边不执行。
B:同理||和|的区别?
C:开发中常用
&&,||,!
13.位运算符的基本用法1
A:位运算符有哪些
&(与),|(或),^(异或) , ~(按位取反) ,<<(左移) ,>>(右移),>>>(无符号右移)
注意事项:位运算是直接对二进制补码进行运算。
B:案例演示
&,|,^,~的用法
结论:
&:有0则0
|:有1则1
^:相同则0,不同则1
~:按位取反
14.位异或运算符的特点及面试题
A:案例演示
位异或运算符的特点
inta = 10;
intb = 20;
a^ b ^ b
a^ b ^ a
^的特点:一个数据被另一个数据位异或两次,该数本身不变。
B:面试题:
请自己实现两个整数变量的交换(4种方式)
1.使用第三方变量(画图演示),开发中使用
2.使用位异或运算符的特点,面试中使用
左边 a,b,a
右边 a ^ b
3.使用和的方式
4.b= (a + b) - (a = b);
注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
15.位运算符的基本用法2及面试题)
A:案例演示
<<:左移 空位补0,被移除的高位丢弃。
>>:右移 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,所有高位补1。
>>>:无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。
B:结论:
<<: 把<<左边的数据乘以2的移动次幂
>>: 把>>左边的数据除以2的移动次幂
C:面试题:
最有效的方式算出2乘以8等于几?
16.三元运算符的基本用法
A:三元(三目)运算符的格式
(关系表达式) ? 表达式1 : 表达式2;
B:三元运算符的执行流程
计算关系表达式的值,如果为true, 运算后的结果是表达式1;
如果为false,运算后的结果是表达式2;
C:案例演示
获取两个数中的最大值
三元运算符的练习
A:案例演示
比较两个整数是否相同
B:案例演示
获取三个整数中的最大值
运算符的优先级
A:从数学中的运算符优先级引出java中运算符也需要优先级
B:看运算符的优先级表,总结出Java中运算符的优先级顺序
注意事项:
(a)算术运算符优先级最高
位移运算符
比较运算符
逻辑运算符
赋值运算符优先级最低。
(b)如果在程序中,要改变运算顺序,可以使用括号()
--练习
(基础数据类型在栈,里面直接分配内存,而引用数据则是通过堆里的对象来对栈中的内容进行引用)
基本数据类型由低级到高级分别为:(byte、short、char)->int -> long -> float -> double
(此处的“级别”是指表示值的范围的大小)
题目:switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
答:在switch(expr1),expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本数据类型或者int的包装类Integer,由于byte,short,char都可以隐式转换为int,所以这些类型以及他们的包装类也是可以用switch的。显然,long和String类型都不能被隐式转换为int类型(long可以强制转换为int,但是会丢失精度),所以他们不能作用于swtich语句中
题目:Short s1 = 1;s1 = s1+ 1;有什么错?Shorts1 = 1;s1+= 1;有什么错?为什么?
本文来自博客园,作者:diligently,转载请注明原文链接:https://www.cnblogs.com/luo12828-foxmail/p/16964232.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)