ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础-基础语法-基本数据类型

2020-12-18 23:01:24  阅读:216  来源: 互联网

标签:Java i1 基础 数据类型 System char 类型 int println


Java工程师知识树 / Java基础

文章目录

概述:

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

分类:

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

基本数据类型byteshortintlongcharfloatdoubleboolean
类型整数类型整数类型整数类型整数类型文本类型浮点类型浮点类型布尔型
封装类ByteShortIntegerLongCharacterFloatDoubleBoolean
缓存类ByteCacheShortCacheIntegerCacheLongCacheCharacterCache
缓存值(-128到127)(-128到127)(-128到127)(-128到127)(0到127)

8 种类型表示范围如下:

byte:8位,最大存储数据量是256,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,赋值时可以加上f或F也可以不加。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值

封装类的缓存范围测试

public class TestMain {
    public static void main(String[] args) {
        testShort();
        testInteger();
        testFloat();
        testCharacter();
    }

    public static void testShort(){
        Short i1 = 127;
        Short i2 = 127;
        System.err.println(i1 == i2);
        i1 = 128;
        i2 = 128;
        System.err.println(i1 == i2);
    }

    public static void testInteger(){
        Integer i1 = 127;
        Integer i2 = 127;
        System.err.println(i1 == i2);
        i1 = 128;
        i2 = 128;
        System.err.println(i1 == i2);
    }

    public static void testFloat(){
        Float i1 = 127F;
        Float i2 = 127F;
        System.err.println(i1 == i2);
        i1 = 128F;
        i2 = 128F;
        System.err.println(i1 == i2);
    }
    public static void testCharacter(){
        Character i1 = 127;
        Character i2 = 127;
        System.err.println(i1 == i2);
        i1 = 128;
        i2 = 128;
        System.err.println(i1 == i2);
    }
}
结果:
true
false

true
false

false
false

true
false

Java中的char类型

1、JAVA中,char占2字节,16位。可在存放汉字
2、char赋值
char a=‘a’; //任意单个字符,加单引号。
char a=‘中’;//任意单个中文字,加单引号。
char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
注:只能放单个字符。
3、char运算
char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。
在JAVA中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。
示例:
char m=‘a’;  ——a。
char m=‘a’+‘b’;  ——Ã。 //char类型相加,提升为int类型,输出对应的字符。注,在CMD.exe用输出结果是问题?,不同的编码输出显示不一样。Eclipse中须改成UTF-8。
int m=‘a’+‘b’;   ——195。//195没有超出int范围,直接输出195。
char m=‘a’+b;  ——报错。//因为b是一个赋值的变量。
char m=197;  ——Ã。 //输出字符编码表中对应的字符。
char m='197;  ——报错。//因为有单引号,表示是字符,只允许放单个字符。
char m=‘a’+1;  ——b。//提升为int,计算结果98对应的字符是b。
char m=‘中’+‘国’;  ——42282。
char m=‘中’+‘国’+‘国’+‘国’;  ——报错。int转char有损失。因为结果已经超出char类型的范围。
int m=‘中’+‘国’+‘国’+‘国’;  ——86820
char m=‘中’+1;  ——丮。//1是int,结果提升为int,输出对应的字符。
char m=‘中’+“国”;  ——报错。String无法转换为char。
System.out.println(‘中’+“国”);  ——中国。//没有变量附值的过程。String与任何字符用“+”相连,转换为String。
总结:
用单引号’'标识,只能放单个字符。
char+char,char+int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。

Java自动类型转换

1)两种类型是彼此兼容的
2)转换的目的类型占得空间范围一定要大于转化的源类型
**正向过程:**由低字节向高字节自动转换
byte-short-char>int->long->float->double

image.png

**逆向过程:**使用强制转换,可能丢失精度。
int a=(int)3.14;
格式:目标类型 变量=(目标类型)源类型变量/常量

Java定义了若干使用于表达式的类型提升规则:
1)所有的byte型. short型和char型将被提升到int型(例外: final修饰的short, char变量相加后不会被自动提升。)
2)如果一个操作数是long形 计算结果就是long型;
3)如果一个操作数是float型,没有double类型,计算结果就是float型;
4)如果一个操作数是double型,计算结果就是double型;
易错点:

byte b1=1,b2=2,b3,b6; 
final byte b4=4,b5=6; 
b6=b4+b5; 
b3=(b1+b2);   //会发生编译错误
System.out.println(b3+b6);
//没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。
byte b;
b=3;
b=(byte)b*3    //编译出错,因为(byte)的运算级别比*高,所以会先转换b后再*3
b=(byte)(b*3)  //正确

自动装箱与自动拆箱

什么是拆箱什么是装箱

装箱就是 自动将基本数据类型转换为包装器类型;
拆箱就是 自动将包装器类型转换为基本数据类型。

拆箱与装箱是如何实现的

装箱和拆箱的实现过程:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。
注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
Double、Float的valueOf方法的实现是类似的。

综合范例
public class Main {
    public static void main(String[] args) {
        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        Long h = 2L;
        System.out.println(c == d);
        System.out.println(e == f);
        System.out.println(c == (a + b));
        System.out.println(c.equals(a + b));
        System.out.println(g == (a + b));
        System.out.println(g.equals(a + b));
        System.out.println(g.equals(a + h));
    }
}
结果:
true
false
true
true
true
false
true

欢迎关注简书
https://www.jianshu.com/u/2d59a41f50a9

标签:Java,i1,基础,数据类型,System,char,类型,int,println
来源: https://blog.csdn.net/baidu_25310663/article/details/111397801

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有