杨姐带你学Java_day2_数据类型和运算符

一、Java中的数据类型
(1)基本数据类型 :使用一块内存存储,直接存储的是“值” ,这块内存的名称叫“栈内存”
(2)引用数据类型 :使用两块内存存储,一块存“地址”,一块存”值“
存地址的叫”栈内存“,存储的叫”堆内存“
八大基本数据类型:
在这里插入图片描述
整数 :
public class Test2{
public static void main(String [] args){
//java中的整数根据数据存储的范围 大小分 byte,short ,int ,long,
//这四种数据类型有三种表示形式, 十进制,八进制,十六进制
byte b=14; //十进制 (默认为十进制)
short s=017;//八进制以0开头
int i=0x86f;//十六进制 以0x开头 (默认为int类型)
long x=100L; //大小写L
long y=100l; //小写l ,不建议写小写l,因为像1

}
}
浮点数:
默认为double
使用 float需要加上大小写F
注意:浮点数有舍入误差不能使用“==”进行等值比较,科学计算使用double,涉及到钱财,银行,保险,金融,使用BigDecimal类
public class Test3{
public static void main(String [] args){
float f=34.5f;
float f2=34.5F; //必须加上大小写F
double d=34.5; //java程序默认为double类型,所 以d/D可以省略不写
double d2=34.5d;
double d3=34.5D;

}
}
字符型
Java采用的是Unicode码,所以字符型,在Java中占2个字节
有效范围 是0~65535之间的整数,一共能表示65536个字符

在Java中使用char 类型表示,使用单引号 ,
在这里插入图片描述
布尔类型
占一位,在Java中使用boolean进行声明,取值只能是true或false
在这里插入图片描述
所有引用数据类型均占4个字节,用于存储的是内存地址
二、变量
变量:在程序运行过程中,其值可以发生改变的量,称为变量
实际上就是内存空间的一个表示形式
变量的特点:声明,赋值,再使用
public class Test1{
public static void main(String [] args){
int age=20;
System.out.println(“age=”+age);
}
}
内存状态:
在这里插入图片描述
问题?为什么变量不赋值(变量尚未初始化)不能使用?
在这里插入图片描述
三、常量
常量:在程序运行过程中,其值不可以发生改变的量,称为常量
使用关键字final修饰 的变量称为常量
public class Test6{
public static void main(String [] args){
final double PI=3.14; //常量 double PI=3.14变量,使用final就称为常量
// PI=3.15;无法为最终变量PI分配值
int r=3;
System.out.println(“圆的面积:”+(PIrr)); //可以说明double本身有精度的损失(xia chi)
System.out.println(“圆的周长:”+2PIr);
}
}
在这里插入图片描述
四、Scanner的使用
Scanner键盘录入
步骤
(1)导包,找到Scanner位置
(2)创建Scanner对象
(3)屏幕提示
(4)键盘录入
nextInt();
nextDouble();
next();
next().charAt(0); //先获得一个字符串,再从字符串中获取索引为0的字符
String相当于char类型的数组

import java.util.Scanner;//导包
public class TestScanner{
public static void main(String [] args){
//创建Scanner对象
Scanner input=new Scanner(System.in); //System.in指的是键盘
System.out.print(“请输入您的姓名:”);
String name=input.next();
System.out.print(“请输入您的年龄:”);
int age=input.nextInt();
System.out.print(“请输入您的身高:”);
double height=input.nextDouble();
System.out.print(“请输入您的性别:”);
char gender=input.next().charAt(0);
System.out.println("----------------您录入的信息是:---------------------");
System.out.println(“姓名:”+name);
System.out.println(“年龄:”+age);
System.out.println(“身高:”+height);
System.out.println(“性别:”+gender);
System.out.println("-----------------------------------------------------");
}
}
五、算术运算符
算术运算符:+,-,,/,%,++,–
public class TestOperator1{
public static void main(String [] args){
//算术运算符
int a=10,b=20;
int c=a+b;
System.out.println(a+"+"+b+"="+c);
System.out.println(a+"-"+b+"="+(a-b));
System.out.println(a+"
"+b+"="+a*b);
System.out.println(a+"/"+b+"="+a/b);
System.out.println(a+"/"+20.0+"="+a/20.0);//int /double=double
System.out.println(a+"%"+b+"="+a%b);
System.out.println(a++); //10,先打印输出,然后再自加1
System.out.println(“a=”+a);//11
System.out.println(–b); //19.先减,然后再输出
// a++;有区别吗?没有
++a;
System.out.println(a);
System.out.println(“a+b的结果为:”+a+b); //第一个+的左右有一个是String,以后所有的结果都是String
System.out.println(a+b+“是运行结果”); //第一个+的左右是数值型,所以起加法运算作用 31+“是运行结果”,第二个加号的左右有一个是String,以后的结果都是String

}
}
在这里插入图片描述
注意:
(1)int+short+byte+long结果为long
(2)short+byte结果为int
(3)float+double结果为double
(4)float+float结果为float

(5)byte+short+int+char+long+float+double结果为double
六、赋值运算符和扩展赋值运算符
赋值运算符 =
赋值运算符 = ,执行顺序,从右到左
赋值赋的实际上是值的副本
public class TestSwap{
public static void main(String [] args){
int numA=10,numB=20;
System.out.println(“交换前numA=”+numA+"\tnumB="+numB);
//使用第三变量进行交换
int temp=numA;
numA=numB;
numB=temp;
System.out.println(“交换后numA=”+numA+"\tnumB="+numB);

}
}
内存分析
在这里插入图片描述
如何不使用第三变量,交换两个变量的值
public class TestSwap2{
public static void main(String [] args){
int numA=10,numB=20;
System.out.println(“交换前numA=”+numA+"\tnumB="+numB);
numA=numA+numB;
numB=numA-numB;
numA=numA-numB;
System.out.println(“交换后numA=”+numA+"\tnumB="+numB);

}
}

所对应的”反汇编“代码
命令; javap -c 类名
在这里插入图片描述

扩展赋值运算符 +=,-=,=,/=,%=
public class Test7{
public static void main(String [] args){
int numA=10,numB=20;
numA+=numB;//相当于 numA=numA+numB;
System.out.println(numA);
numA-=numB;//相当于numA=numA-numB;
System.out.println(numA);
numA/=numB;//相当于numA=numA/numB;
System.out.println(numA);
numA
=numB;//相当于numA=numA*numB;
System.out.println(numA);
byte b=10;
b+=2; //相当于 b=b+2;实际上 b=(byte)(b+2) ,javac进行了强制类型转换
//b=b+2; //不兼容的数据类型,不能从int转到byte
System.out.println(“b=”+b);

}
}
在这里插入图片描述
七、关系运算符和逻辑运算符
关系运算符: >,<,>=,<=,==,!=

public class Test8{
public static void main(String [] args){
System.out.println(“8>9:”+(8>9));
System.out.println(“8<9:”+(8<9));
System.out.println("89:"+(89));
System.out.println(“8>=8:”+(8>=8));
System.out.println(“8<=8:”+(8<=8));
System.out.println(“8!=8:”+(8!=8));

}
}
在这里插入图片描述
常量的运算是在编译期间,而非运行期间

逻辑运算符: &&,||,!,&,|
(1)短路与 &&,短路非 ||
短路与: 左侧为false,右侧不再计算

(2)逻辑与 & , 逻辑或 |
逻辑与: 无论左侧是否为false,都将进行计算右侧表达式
public class Test9{
public static void main(String [] args){
boolean f=8>9&&10/0>2; //8>9为false,10/0>2不再计算
System.out.println(f); //false
//System.out.println(4&&8);//错误报错 &&左右均为boolean类型(关系运算符的比较结果)
System.out.println(4&8); //0 位运算,同为1时结果为1,&左右为数值型,&将执行的是位运算符
boolean f2=8>9&10/0>2; //编译正常,运行时出错(运行时异常)by zero ,0不能作除数
System.out.println(f2);

}
}
短路与和逻辑与的区别
(1)短路与&&,只是逻辑运算符
逻辑与 & ,即是逻辑运算符,也是位运算符
(2)短路与&&,左侧为false时,不计算右侧表达式
逻辑与 &,无论左侧表达式是否为false,都将计算右侧表达式
(3)逻辑与 &,如果左右的表达式为数值型,将执行位运算符
(同为1时,结果为1)
在这里插入图片描述
public class Test10{
public static void main(String [] args){
boolean f=8<9||10/0>2;
System.out.println(f); //true, 8<9的结果为true,右则不计算
//System.out.println(4||8); //编译报错
System.out.println(4|8); //同为0时结果为0
boolean f2=8<9|10/0>2; //左侧为true,依然计算右侧表达式
System.out.println(f2); //by zero

}
}
在这里插入图片描述
八、位运算符
位运算符
&:按位与,同为1时,结果为为1
| :按位或,同时0时,结果为为0
<< :左移位,向左移动一位,相当于乘以2, >>>:无符号右移,向右移动一位,相当于除以2
public class Test12{
public static void main(String [] args){
int b=8;
int a=b<<1; //向左移动1位,相当于乘以2
System.out.println(a);
int d=b>>>1; //无符号右移一位,相当于除以2
System.out.println(d);

}
}
在这里插入图片描述
九、条件运算符
条件运算符也称三目运算符,是if…else的简写结构
运算顺序,是从右到左

import java.util.Scanner;
public class Test13{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
System.out.println(“请输入两个整数:”);
int a=input.nextInt();
int b=input.nextInt();
/String str="";
if(a<b){
str=“a小于b”;
}else{
str=“a大于等于b”;
}
/
//a<b的结果为true,将输出:之前的内容,a<b的结果为false,将输出:之后的内容
// System.out.println( a<b?“a小于b”:“a大于等于b”);
System.out.println(a<b?“a小于b”:a>b?“a大于b”:“a等于b”);
}
}
十、类型转换
(1)自动类型转换
a)类型相兼容 byte,short,int,long,float,double ,char
整数 byte ,short ,int, long 会自动向浮点数转换
b)小转大 容量小的会自动转成容量大
byte +short–>int
short+int–>int
int+long–>long
char+int–>int 类型相兼容
int +double–>double 类型相兼容
long +float–>float 类型相兼容

import java.util.Scanner;
public class Test14{
public static void main(String [] args){
int a=10,b=20;
char oper=’+’; //char转int计算
System.out.println(a+oper+b); //因为 43是’+'所对应的Unicode码 char与int一起计算
}
}
强制类型转换
(1)损失精度
(2)数据失真 (截断)
import java.util.Scanner;
public class Test15{
public static void main(String [] args){
double a=98.9;
int b=(int)a; //98,损失精度
System.out.println(b);
int x=300; //0000 0000 0000 0000 0000 0001 0010 1100
byte y=(byte)x; //0010 1100 -->44的二进制 截断
System.out.println(y);//44
}
}
案例:
从键盘录入一个小写字母,转成相应大写字母
import java.util.Scanner;
public class Test16{
public static void main(String [] args){
Scanner input=new Scanner(System.in);
System.out.println(“请输入一个小写的英文字母:”);
char c=input.next().charAt(0);
//大小写字母之间相差32,举例小写a为97,大写A为65
int unicode=c-32; //自动类型转换 char -int 结果为int
char bigC=(char)unicode; //强制类型转换 int 强转成char
System.out.println(c+“对应的大写字母为:”+bigC);
}
}
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值