大数据学习-2024.2.21
数据类型:java是强类型语言,每一个数据都被定义一个固定的数据类型
分类:
1、基本数据类型
整数类型 所占总字节数 范围
byte 1个字节 -2^7 ~ 2^7-1
short 2个字节 -2^15 ~ 2^15-1
int 4个字节 -2^31 ~ 2^31-1
long 8个字节 -2^63 ~ 2^63-1
小数类型
float 4个字节
double 8个字节
字符类型
char 根据实际编码来变化的
布尔类型
boolean 1个字节
2、引用数据类型(放到数组,面向对象的时候讲解)
变量定义的语句格式:
数据类型 变量名 = 初始化值;
注意事项:
1、在同一作用域(理解为一个大括号内部)下,变量名不能重复
2、整数默认是int类型,要想定义一个long类型的变量,需要在值的后面加上L或者l,推荐L
3、小数默认是double数据类型
4、要想定义一个float类型的变量,需要在值的后面加上F或者f,推荐F
5、遍历必须要有初始化值,否则无法使用
- byte-short-int-long-float-double, char-boolean
+号:
两种运算:
1、数值加法运算
2、字符串拼接运算(后面再说)
数据类型之间的转换:
1、自动数据类型转换
byte,short,char–>int-long-float-double
2、强制类型转换
语句定义格式:目标数据类型 变量名 = (目标数据类型)(表达式或者结果)
注意:强制数据类型转换,有可能会导致精度损失,不建议基本数据类型之间使用强制类型转换
注意事项:
1、变量之间参与运算,会先自动提升数据类型
2、常量之间参与运算,会先计算出结果,再判断是否在目标数据类型范围内
重要结论:
1、加号➕两边只要有一边是字符串,就做字符串拼接操作,结果依旧是字符串
2、加号➕之间的运算顺序是从左向右
3、加号➕两边只要没有字符串,就做加法运算
赋值运算符:
= += -= *= /= %=
关系运算符(比较运算符):关系运算符一定是布尔类型的
== != > < >= <=
选择结构:
if语句格式1:
if(关系表达式){
语句体;
}
举例:
if(丁义杰==“男”){
去男厕所;
}
注意事项:
1、当语句体只有一行话的时候,大括号可以省略,建议永远不要省略大括号
2、小括号后面可以加分号,但是加了分号之后表示空语句体。
3、小括号中的结果只能是布尔类型的
if语句定义格式:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else if(…){
…
}…
{
}else{
}
逻辑运算符:参与判断的是布尔类型,结果也是布尔类型
& | ^ ! && ||
& 有false则false ; | 有true则true ; ^ 相同则false,不同则true ; ! 将false变成true,将true变成false
&&短路与: 当左边的表达式结果是false的时候,右边就不会执行,结果为false
||短路或: 当左边的表达式结果是true的时候,右边就不会执行,结果为true
三目运算符:
语句定义格式:(关系表达式)?表达式1:表达式2;
注意:三目运算符必须要有一个返回结果
举例:boolean c = (a>3)?true:false;
键盘录入:今天只需要掌握用法即可,后面说到面向对象的时候,才会一一解释其中单词的意思
用法:
1、导包 import java.util.Scanner;
2、创建对象 Scanner sc = new Scanner(System.in);
3、使用对象
接收整数:sc.nextInt()
接收字符串:sc.next()
语句结构:
顺序结构: 程序以自上而下的顺序执行
选择结构: if选择 switch选择
循环结构: for循环 while循环(do…while循环)
package com.shujia.day02;
/*
位运算符:参与运算的符号两边是数值,结果也是一个数值
& | ^ ~ >> << >>>
*/
public class WeiOptDemo {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a & b); // 0
System.out.println(a | b); // 7
System.out.println(a ^ b); // 7
System.out.println(~ b); // -5
}
}
/*
3的补码:00000000 00000000 00000000 00000011
4的补码:00000000 00000000 00000000 00000100
&:有0则0
00000000 00000000 00000000 00000011
&
00000000 00000000 00000000 00000100
--------------------------------------
00000000 00000000 00000000 00000000 --> 0
|:有1则1
00000000 00000000 00000000 00000011
|
00000000 00000000 00000000 00000100
--------------------------------------
00000000 00000000 00000000 00000111 --> 7
^:相同则0,不同则1
00000000 00000000 00000000 00000011
^
00000000 00000000 00000000 00000100
--------------------------------------
00000000 00000000 00000000 00000111 --> 7
~:0变成1,1变成0
00000000 00000000 00000000 00000100
~
11111111 11111111 11111111 11111011
已知补码求原码:
补码: 1 1111111 11111111 11111111 11111011
反码: 1 1111111 11111111 11111111 11111010 //补码减1
原码: 1 0000000 00000000 00000000 00000101 //按位取反 --> -5
*/
package com.shujia.day02;
/*
位运算符:
>>右移:补码向右移动若干位,右边多出的部分丢弃,左边若原本最高位是1,就用1补齐,若原本最高位是0就用0补齐
右移n位,实际上就是除以2的n次方
<<左移:补码向左移动若干位,左边多出的部分丢弃,右边就用0补齐,左移n位,实际上就是乘2的n次方
>>>无符号右移:补码向右移动若干位,右边多出的部分丢弃,左边用0补齐
*/
public class WeiOptDemo2 {
public static void main(String[] args) {
System.out.println(24>>2); // 6 24/4=6 24/2^2=6
System.out.println(3<<2); // 12 3*4=12 3*2^2=12
System.out.println(-24>>>2); // 1073741818
}
}
/*
24的补码:00000000 00000000 0000000 00011000
24>>2:
00000000 00000000 0000000 00011000
00000000 00000000 0000000 00000110(00) --> 6
3的补码:00000000 00000000 00000000 00000011
3<<2:
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100 --> 12
-24的原码:10000000 00000000 0000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
*/