Day3(1)变量及数据类型 (2)数据类型转换

一。变量及数据类型

定义变量的语法: 数据类型 变量名 = 值; 例如int a = 20;

基本数据类型:

整数型 byte short int long

浮点型 float double

字符型 char

布尔型 boolean

引用数据类型:String字符串型 等...

public class Demo1 {

    public static void main(String[] args) {
        /*String s = "abcdeft";//双引号
        s = "java";*/

       // int a = 100;
       // byte b = 100;

       /*自动转换(隐式转换)
        //a = b;//把b的值赋给a  小范围的数据类型可以直接提升为大范围的数据类型
        a  = a+b; //小范围的数据类型和大范围的数据类型运算时,结果自动提升为大的数据类型
        System.out.println(a);*/

       //强制转换
      // b = (byte)a; //大范围的数据类型必须通过强制转换才能转为小范围的数据类型
      // byte c = (byte)(a+b);//注意byte范围
       //System.out.println(c);

        byte b1 = 30;
        byte b2 = 10;
        byte b3 = (byte)(b1+b2);//为了避免两个byte相加(运算),结果超出byte范围,所以把变量自动提升为int

        byte b4 = 3 + 4;//常量的值只要在byte范围,直接赋值给byte



    }
}

二。数据类型转换

2.1 隐式转换(自动转换)

 int a = 100;
 byte b = 10;
 //1. 小的数据类型可直接提升为大的数据类型
 // a = b;
 //2. 当小的数据类型和大的数据类型进行运算时,结果会提升为大的数据类型
 a = a + b;
 System.out.println(a);
public class Demo2 {

    public static void main(String[] args) {
        //long长整型 8字节  64位  最大值  2的63-1
        //float浮点型4字节  32位  最大值  2的127-1
        //所以float的范围比long范围要大
        // byte < short < int <long < float  <double
        float y = 999L;//自动转换 整数可以自动提升为浮点型 .0
        System.out.println(y);

        long x = (long)9.0F;//强制转换  浮点型必须转换才能转成整数
        System.out.println(x);


    }
}

2.2 显式转换(强制转换)

int a = 100;
byte b = 10;
//1. 大的数据类型需要强制转换才能转为小的数据类型
//注意:如果超出了被赋值的数据类型的取值范围,得到的结果会出现特殊情况
b = (byte)a;
 System.out.println(b);
b = (byte)(a+b);
System.out.println(b);
public class Demo3 {

    public static void main(String[] args) {
        //字符型char   和  整数型int的转换
        //计算机把所有的符号能够表示成二进制数字,指定了一套规则(编码)
        //ASCII  保存128个常用字符以及转换int值
        //GBK编码 支持中文  简体  繁体
        //GB2312  支持中文的简体
        //UTF-8 开发建议  全世界通用的编码
        System.out.println('a'+1);//字符参加运算会自动提升为int类型
        System.out.println('a'*'a');//支持int类型所有的运算
        System.out.println('我'+1);//0-65535  2个字节 2的15次方-1

        char c = 120;
        System.out.println(c);
        int x = 'b';//char 与int 一家,自动转换

        int y = 100;
        char t1 = 100-3;
        char t2 = (char)(y-3);
        System.out.println(t2);


    }
}
public class Demo4 {

    public static void main(String[] args) {
        //+   数值相加  正号  连接字符串
        //姓名  年龄   性别
       /* String name = "凯";
        int age = 20;
        char sex = '男';
        //连接成一条信息  输出   \n 换行
        System.out.println("我叫"+name+"\n我今年"+age+"岁\t我是"+sex+"的");

        String x = "13";
        String y = "14";
        System.out.println(x+y);
        System.out.println("11"+1);


        int a = 10;
        int b = +20;
        int c = a+b;*/


     /*  int a = 10;
       int b = 3;
       int c = a / b; //左右两边都是整数 ,结果一定是int

        double d = a/b;//左右两边都是整数 ,结果一定是int   3.0

        double e = 10.0/3; //精确到小数位3.3333333333333335
       System.out.println(c);
       System.out.println(d);
       System.out.println(e);


       int x = 12 % 5;
        System.out.println(x);
        // 偶数 % 2 = 0(余数)
        //奇数 % 2 = 1 (余数)*/

     //++自增(每次加1)    --自减(每次减1)
    //x++和 --x的区别
    //1. 如果单独使用,没有任何区别
    //2. ++写在前面,先自己+1,再去做其他运算
    //3. ++写在后面,先去做其他运算, 再自己+1

   /*  int x  = 18;
     System.out.println(x--);
     System.out.println(--x);*/

/*    int b= 10;
    b++;
    b = b+1;*/

  /*  int a = 10;
    a = a * 2; // 把变量的值*2
    a *= 2; //相当a = a*2


    int b = 20;
    b /= 2;
    System.out.println(b);*/
/*
        int a = 100;
        int weixin = 9;
        int xianjing = 1000;
        int zhifubao = 0;
        boolean b = !(weixin>=a || xianjing>=a || zhifubao >=a);

        System.out.println(b);*/
     /*   b++;
        System.out.println(b!=a);  //true真或者 false假
        System.out.println(b>a);
        System.out.println(b==a);
        System.out.println(b--==a);
        System.out.println(b=a);*/

        int a =10;
        int b = 20;
       /* boolean c1 = (a>5)|(++b>20);
        System.out.println(b);*/
        boolean c2 = (a<5)&&(++b>20);
        System.out.println(b);
        System.out.println(c2);
        System.out.println(c2);

面试题

byte b1 = 3;

byte b2 = 4;

byte b3 = b1 + b2;

解决 byte b3 = (byte)(b1 + b2);

说明:由于b1和b2是变量,变量存储的值是变化的,在编译的时候不会计算变量表达式里面具体的值,相加有可能会超出byte的取值,所以byte或short在参与运算的时候会自动提升为int。

byte b3 = 3+4;

常量优化机制:给一个变量赋值,如果等于号的右边是常量的表达式并且没有一个变量,那么就会在编译阶段计算该表达式的结果,如果一旦有变量参与表达式,那么就不会有编译期间的常量优化机制

2.3 整数型与浮点型

float y = 999L;
System.out.println(y);
​
long x = (long)9.0F;
System.out.println(x);
​
long x1 = (long)9.8F;
System.out.println(x1);
取值范围 byte<short<int<long<float<double
虽然long的长度为8个字节float的长度为4个字节 
但是他们底层的存储结构不同,所代表的数值大小范围也不同

2.4 整数型与字符型

int y = 'a';
System.out.println(y);
char x = 97;
System.out.println(x);

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码统一规定了上述常用符号用哪些二进制数来表示

GBK:仅限中文,含简体与繁体中文

GB2312:仅限中国大陆使用,只含简体中文

UTF-8:它是一种全世界国家通用的一种编码,开发建议你选择UTF-8编码

System.out.println('a'+1);//字符型在参与运算时会自动提升为int类型
System.out.println('a'+'a');//支持int类型的各种运算
char c1 = 'b';
char c2 = 'a';
int x = c2-c1;
System.out.println(x);
char c = 100-3;//常量参数运算时,只要结果符合0-65535范围即可
System.out.println(c);
​
int x = 100;
char c1 = (char)(x - 3);//变量参与运算符需要强制转换
System.out.println(c1);

三。运算符

3.1 算术运算符

加+ 、减- 、乘* 、除/ 、模(余数)%

注意事项:

+号在java中有三种作用:代表算术运算符、正号、字符串的连接符

整数相除只能得到整数,如果想得到小数,必须把数据的类型变成浮点数类型

%:求余数。任何一个整数%2结果不是0就是1,可以用%判断一个数是否是奇偶数

自增自减运算符++ --

++ :自增,对原有的数据进行+1

- - :自减,对原有的数据进行-1

注意:当++或--在变量的前面和在变量的后面的区别!!

单独出现时,写前面与写后面无区别

在变量后面: 先赋值,后自增

在变量前面: 先自增,后赋值

面试题

int a = 20; int b = 20;

int c = 20;

a = b++;

c = --a;

b = ++a;

a = c--;

求变量a、b、c的值?


案例演示2:

int x = 4;

int y = (x++) + (++x) + (x*10);

求变量x、y的值?


哪句会报错,为什么?

byte b = 10;

b++; //不会报错底层做了b+1,b被提升为int类型+1的结果也是int类型,底层会自动强转为byte类型

b = b+1;//报错:因为b被提升为int类型+1的结果也是int类型,解决: b=(byte)(b+1)

3.2 赋值运算符

基本的赋值运算符:=

扩展的赋值运算符:+= ,-=,*=, /=, %=

a +=1;可以写成 a = a+1;也可以写出a++;
a *=2;可以写成 a = a*2;

3.3 关系运算符

==,!=,>, >=, <, <=

无论你的操作是简单还是复杂,结果是boolean类型

int a = 10;
int b = 10;
b++;
System.out.println(b!=a);
System.out.println(b>a);
System.out.println(b==a);
System.out.println(b--==a);
System.out.println(b=a);

3.4 逻辑运算符

&逻辑与 |逻辑或 !逻辑非

&&短路逻辑与 ||短路逻辑非

逻辑运算符&&和&的区别(掌握)

案例演示 &&和&的区别? 最终结果一样。 &&具有短路效果。左边是false,右边不执行。左边为true才执行右边 &是无论左边是false还是true,右边都会执行

在开发中常用:&&、||、!

3.5 三元运算符

三元(三目)运算符的格式 (关系表达式) ? 表达式1 : 表达式2;

案例1 获取两个数中的最大值

案例2 比较两个整数是否相同

案例3 获取三个整数中的最大值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值