2020-06-03

数据类型转换

java程序中要求参与的计算的数据,必须保证数据类型的一致性,如果数据类型不一致将发生类型的转换

自动转换

一个int类型变量和一个byte类型变量进行加法运算,结果回事什么数据类型?

1:int i = 1;      2:byte b = 2;

运算结果,变量的类型将是int类型,这就是出现了数据类型的自动类型转换现象。

自动转换:将取值范围小的类型,自动提升为取值范围大的类型

数据类型自动转换代码                            /*

*当数量类型不一样时,将会发生数据类型转换*

*自动转换类型(隐式)*  1.  特点:代码不需要进行特殊处理,自动完成*  2.  规则:数据范围从小到大*

*强制转换类型(显式)* */

public class Demo01DataType {

public static void main(String[] args) {

System.out.println(1024); //这是一个整数,默认就int类型

        System.out.println(3.14); //这就是一个浮点数,默认就是double类型

        //左边是long类型,右边是默认的int类型,左右不一样

        //一个等号代表赋值,将右侧的int常量,交给左侧的long变量进行存储

        //int--> long,符合了数据范围从小到大的要求

        //这一行代码发生了自动类型转换

        long num1 =100;

        System.out.println(num1); //100

        //左边是double类型,右边是float类型,左右不一样

        //float-->double,符合从小到大的规则

        //也发生了自动类型变换

        double num2 =2.5F;

        System.out.println(num2); //2.5

        //左边是float类型,右边是long类型,左右不一样

        //long-->float,范围是float更大一些,符合从小到大的会泽

        //也发生了自动类型转换

        float num3 =30L;

        System.out.println(num3); //30.0

    }

}

数据类型强制转换

将1.5赋值到int类型变量会发生什么?产生编译失败,肯定无法赋值。

1  int i = 1.5; //错误

double类型内存8个字节,int类型内存4个字节。1.5是double类型,取值范围大于int。可以理解为double是8升的水壶,int是4升的水壶,不能把大水壶中的水直接放进小水壶去。

想要赋值成功,只有通过强制类型转换,将double类型强制转换成int类型才能赋值。

强制类型转换:将取值范围大的类型强制转换成取值范围小的类型。

比较而言,自动转换是java自动执行的,而强制转换需要我们自己手动执行

转换格式:  1  数据类型  变量名  =  (数据类型)被转数据值

将1.5赋值到int类型,代码改为:

1    //double类型数据强制转换成int类型。直接去掉小数点。

2    int i = (int)1.5;

同样道理,当一个short类型与1相加,我们知道会类型提升,但是还先给结果赋值给short类型变量,就需要强制转换。

强制类型转换代码:     /*

* 强制类型转换*      1.  特点:代码需要进行特殊的格式处理,不能自动完成*      2.  格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;* */

public class Demo02DataType {

public static void main(String[] args) {

//左边int类型,右边是long类型,不一样

        //long-->int,不是从小到大

        //不能发生自动类型转换!

        // 2.  格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;

        int num = (int) 100L;

        System.out.println(num); //100

    }

}

数据类型转换_注意事项

代码                /*

* 强制类型转换*      1.  特点:代码需要进行特殊的格式处理,不能自动完成*      2.  格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;*

*注意事项:*  1.强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。*  2.byte/short/char这三种类型都可以发生数字运算,例如加法“+”。*  3.byte/short/char这三种类型载运算的时候,都会被首先提升成为int类型,然后在计算。*  4.boolean类型不能发生数据类型转换*  */

public class Demo02DataType {

public static void main(String[] args) {

//左边int类型,右边是long类型,不一样

        //long-->int,不是从小到大

        //不能发生自动类型转换!

        // 2.  格式:范围小的类型 范围小的变量名 =(范围小的类型) 原本范围的数据;

        int num = (int)100L;

        System.out.println(num); //100

        int num2 = (int)6000000000L;

        System.out.println(num2); //1705032704

        // double-->int,强制类型转换

        int num3 = (int)3.5;

        System.out.println(num3); // 3.这并不是四舍五入,所有的小数位都会被舍弃掉

        char zifu1 ='A'; //这是一个字符型变量,里面是大写字母A

        System.out.println(zifu1 +1); // 66,也就是大字幕A被当做60进行处理

        //计算机的底层会用一个数字(二进制)来代表字符A,就是65

        //一旦char类型进行了数字运算,那么字符就会按照一定的规则翻译成为一个数字

        byte num4 =40; //注意!右侧的数值大小不能超过左侧的类型范围

        byte num5 =50;

        // byte + byte --> int + int --> int

        int result1 = num4 + num5;

        System.out.println(result1); //90

        short num6 =60;

        // byte + short --> int + int --> int

        // int强制转换为short:注意必须保证逻辑上的 真实大小本来就没有超过short范围,否则会发生数据溢出

        int result2 = num4 + num6;

        System.out.println(result2); //100

    }

}

ASCII编码表             代码        /*

* 数字和字符的对照关系表(编码表):*

* ASCII码表:American Standard Code for Information Interchange,美国信息交换标准代码。* Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开头包含有更多字符。*

* 48 - '0'

* 65 - 'A'

* 97 - 'a'

* */

public class Demo03DataType {

public static void main(String[] args) {

char zifu1 ='1';

        System.out.println(zifu1 +0); // 49

        char zifu2 ='A'; // 其实底层保存的是65数字

        char zifu3 ='c';

        //左侧是int类型,右侧是char类型。

        //char --> int,确实是从小到大

        //发生了自动类型转换

        int num = zifu3;

        System.out.println(num); // 99

        char zifu4 ='中'; // 正确写法

        System.out.println(zifu4 +0); // 20013

    }

}

算数运算符

算数运算符包括

+                    加法运算,字符串连接运算

-                    减法运算

*                    乘法运算

/                    除法运算

%                  取模运算,两个数字相除取余数

++、--           自增自减运算

java中,整数使用以上运算符,无论怎么计算,也不会得到小数。

1    public static void main (String[] args) {

2                int i = 1234;

3                System.out.println(i/1000*1000);    //计算结果是1000

4    }

++    运算,变量自己增长1.反之,    --    运算,变量自己减少1,用法与    ++    一致。

算术运算符_四则与取模运            代码    /*

* 运算符:进行特定操作的符号。  例如:+

* 表达式:用运算符连起来的式子叫做表达式。  例如: 20 + 5。 又例如:a + b

*

* 四则运算:* 加:+

* 减:-

* 乘:*

* 除:/

*取模(取余数):%

*

* 首先计算得到表达式的结果,然后再打印输出这个结果* 复习一下小学一年级的除法公式:* 被除数 / 除数 = 商 ... 余数*

* 对于一个整数的表达式来说,除法用的是整数除,整数除以整数,结果仍然是整数,只看商,不看余数。* 只有对于整数的除法来说,取模运算符才有余数的意义*

* 注意事项:*    1.  一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。* */

public class Demo04Operator {

public static void main(String[] args) {

//两个常量之间可以进行数学运算

        System.out.println(20 +30);

        //两个变量之间也可以进行数学运算

        int a =20;

        int b =30;

        System.out.println(a - b); //-10

        //变量和常量之间可以混合使用

        System.out.println(a *10); //200

        int x =10;

        int y =3;

        int result1 = x / y;

        System.out.println(result1); //3

        int result2 = x % y;

        System.out.println(result2); //余数,模,1

// int + double --> double + double --> double

        double result3 = x +2.5;

        System.out.println(result3); //12.5

    }

}

算数运算符_加号的多种                代码:/*

* 四则运算当中的加号“+”有常见的三种方法:*

*1. 对于数值来说,那就是加法*2. 对于字符char类型来说,在计算之前,char就会被提升成为int,然后在计算。* char类型字符,和int类型数字,之间的对照关系表: ASCII、Unicode

*3. 对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。* 任何数据类型的字符串进行连接的时候,结果都会变成字符串* */

public class Demo05Plus {

public static void main(String[] args) {

//字符串类型的变量基本使用

        //数据类型 变量名称 = 数据值;

        String str1 ="Hello";

        System.out.println(str1); // Hello

        System.out.println("Hello" +"World"); // HelloWorld

        String str2 ="Java";

        System.out.println(str2 +20); // Java20

        // 优先级问题

        // String + int + int

// String      + int

// String

        System.out.println(str2 +20 +30); // Java2030

    }

}

算术运算符_自增自减运                代码:/*

*自增运算符:++

*自减运算符:--

*

* 含义: 让一个变量涨一个数字1,或者让一个变量降一个数字1

* 使用格式:写在变量名称之前,或者写在变量名称之后。例如: ++num, 也可以num++

* 使用方式:*      1. 单独使用:不和其他任何操作混合,自己独立成为一个步骤*      2. 混合使用:和其他操作混合,例如与赋值混合,或者与打印操作混合,等。* 使用区别:*      1.在独立使用的时候,前++和后++没有任何区别,也就是:++num;和num++;是完全一样的。*      2.在混合的时候,有【重大区别】*          A. 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。        【先加后用】*          B. 如果是【后++】,那么首先使用变量本来的数值,【然后再让变量+1】      【先用后加】*

* 注意事项:*      只有变量又能使用自增、自减运算符。常量不可能发生改变,所以不能用。*/

public class Demo06Operator {

public static void main(String[] args) {

int num1 =10;

        System.out.println(num1); //10

        ++num1; // 单独使用,前++

        System.out.println(num1); //11

        num1++; // 单独使用,后++

        System.out.println(num1); //12

        System.out.println("=========");

        // 与打印操作混合的时候

        int num2 =20;

        // 混合使用,先++,变量立刻马上变成21,然后打印结果21

        System.out.println(++num2); // 21

        System.out.println(num2); //21

        System.out.println("=========");

        int num3 =30;

        // 混合使用,后++,首先使用变量本来的30,然后再让变量+1得到31

        System.out.println(num3++); // 30

        System.out.println(num3); // 31

        System.out.println("=========");

        int num4 =40;

        //和赋值操作混合

        int result1 = --num4; // 混合使用,前--,变量立刻马上开始-1变成39,然后将结果39交给result1变量

        System.out.println(result1); // 39

        System.out.println(num4); // 39

        System.out.println("=========");

        int num5 =50;

        // 混合使用,后--,首先把本来的数字50交给result2,然后我自己在-1变成49

        int result2 = num5--;

        System.out.println(result2); // 50

        System.out.println(num5); // 49

        System.out.println("=========");

        int x =10;

        int y =20;

        // 11 + 20 31

        int result3 = ++x + y--;

        System.out.println("result3"); // 31

        System.out.println(x); // 11

        System.out.println(y); // 19

        // 30++; //错误写法!常量不可以使用++或者--

    }

}

赋值运算符

赋值运算符包括:

=                等于号                +=                加等号                    -=                    减等号

*=              乘等好                 /=                 除等号                    %                    取模等

赋值运算符,就是将符号右边的值,赋给左边的值。

代码:    /*

* 赋值运算符分为:*

* 基本赋值运算符:就是一个符号”=“,代表将右侧的数据交给左侧的变量。*  int a = 30;*

* 复合赋值运算符:*      +=    a += 3  相当于a = a + 3

*      -=    b -= 4  相当于b = b - 4

*      *=    c *= 5  相当于c = c * 5

*      /=    d /= 6  相当于d = d / 6

*      %=    e %= 7  相当于e = e % 7

*

* 注意事项:*      1: 只有变量才能使用赋值运算符,常量不能进行赋值。*      2: 复合赋值运算符其中隐含了一个强制了类型转换。* */

public class Demo07Operator {

public static void main(String[] args) {

int a =10;

        // 按照公式进行翻译:a = a + 5

        // a = 10 + 5;

        // a = 15;

        // a本来是10,现在重新赋值得到15

        a +=5;

        System.out.println(a); // 15

        int x =10;

        // x = x % 3;

// x = 10 % 3;

// x = 1;

        // x本来是10,现在重新赋值得到1

        x %=3;

        System.out.println(x); // 1

        // 50 = 30; // 常量不能进行赋值,不能写在赋值运算符的左边,错误写法!

        byte num =30;

        // num = num + 5;

// num = byte + int

// num = int + int

// num = int

// num = (byte) int

        num +=5;

        System.out.println(num); // 35

    }

}

比较运算符

比较运算符包括:

==        比较符号两边数据是否相等,相等结果是true。

<          比较符号左边的数据是否小于右边的数据,如果小于的结果是true。

>           比较符号左边的数据是否大于右边的数据,如果大于的结果是true。

<=         比较符号左边的数据是否小于或者等于右边的数据,如果小于的结果是true。

>=         比较符号左边的数据是否大于或者等于右边的数据,如果大于的结果是true。

!=        不等于符号,如果符号两边的数据不相等,结果是true。

比较运算符,是两数据之间进行比较的运算,运算结果都是布尔值true或者false。

代码:            /*

* 比较运算符:* 大于:>

* 小于:<

* 大于等于:>=

* 小于等于:<=

* 等于:      ==  【两个等号连写才是相等,一个等号代表的是赋值】* 不相等:    !=

*

* 注意事项:* 1. 比较比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false

* 2. 如果进行多次判断,不能连这写。* 数学当中的写法,例如:1 < x > 3

* 程序当中【不允许】这种写法。*

* */

public class Demo08Operator {

public static void main(String[] args) {

System.out.println(10 >5); //true

        int num1 =10;

        int num2 =12;

        System.out.println(num1 < num2); // true

        System.out.println(num2 >=100); // false

        System.out.println(num2 <=100); // true

        System.out.println(num2 <=12); // true

        System.out.println("=======");

        System.out.println(10 ==10); // true

        System.out.println(20 !=25); // true

        System.out.println(20 !=20); // false

        int x =2;

        //System.out.println(1 < x < 3); //错误写法!编译报错!不能连着写

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350