编程小白初学JavaSE——数据类型与变量

一、字面常量

   所谓常量,即程序运行期间不可改变的量称之为常量。例如:圆周率π的数值是3.14,一周的天数是7,一年的天数是365,等等这些生活场景中常见会被应用到编程中的数值,以及一些我们所要达到编程效果的、特定的数值。

   既然我们的编程对常量有所需求,那么常量的应用也意味着常量要带有特定的数据类型才能实现编程需求,下面就一起来学习一下——字面常量的分类。 

   在这之前,肯定会有小伙伴说:“唉,不就是常量分类嘛,学习C语言的时候就已经了解过啦”。

哎,说对了,但也没完全说对。

    因为在C语言中,字符常量是包含了字符串常量在内,也就是概念上来说字符类型是个大集合,而字符串常量是个小集合且含于字符常量。 在Java中多了一个空常量还有布尔常量,下面我们就来展开一一了解一下这些常量。

1.字符串常量

    由“”括起来的,比如“123456”,“hello”,“你好”,这些都是属于字符串常量。

2.整形常量

    程序中直接写的、没有包含小数点的数字,比如10、1000等等。

3.浮点数常量

    程序中直接写的小数,比如圆周率π=3.14,0.5等等。

4.布尔常量

    布尔常量中只有两个变量——true和false,通常用于逻辑判断表达式的结果。

5.字符常量

    由单引号括起来的单个字符,比如‘B’,‘1’。

6.空常量

    null

二、数据类型

在Java中数据类型分为两类基本数据类型引用数据类型。

而基本数据类型有分为四类八种整型,浮点型,布尔型,字符型

整型分为:short,int,long     浮点型分为:float,double

布尔型为:boolean                 字符型分为:char,byte

注意:

   *不论是16位系统还是32位系统,int都占4个字节,long占8个字节

   *整型和浮点型都是带有符号的

   *整型默认为int,浮点型默认为float

   *字符串类型属于引用数据类型

三、变量

    1.变量概念

    在程序中,除了有始终不变的常量外,可能会经常改变的的数据。

    语法格式:数据类型  变量名 = 初始值;

    注意:任何类型的变量在定义的时候,一定要记得对变量进行初始化

double d = 3.14;
char c = 'A';
boolean b = true;
System.Out.println(a);
System.Out.println(d);
System.Out.println(c);
System.Out.println(b);
a = 100; // a是变量,a中的值是可以修改的
         //注意:= 在java中表示赋值,即将100交给a,a中保存的值就是100
System.Out.println(a);
// 注意:在一行可以定义多个相同类型的变量
int a1 = 10, a2 = 20, a3 = 30;
System.Out.println(a1);
System.Out.println(a2);
System.Out.println(a3);

1.整型变量

整型变量根据字节长度分为三种:字节型变量(byte),短整型(short),整型(int),长整型(long)。当然,如果有数据范围要求更大的话,还有long long

// 方式一:在定义时给出初始值
int a = 10;
System.Out.println(a);
// 方式二:在定义时没有给初始值,但使用前必须设置初值
int b;
b = 10;
System.Out.println(b);
// 使用方式二定义后,在使用前如果没有赋值,则编译期间会报错
int c;
System.Out.println(c);
c = 100;
// int型变量所能表示的范围:
System.Out.println(Integer.MIN_VALUE);
System.Out.println(Integer.MAX_VALUE);
// 注意:在定义int性变量时,所赋值不能超过int的范围
int d = 12345678901234; // 编译时报错,初值超过了int的范围

注:1.任何种类的系统下int都是4个字节

        2.在定义变量时推荐定义与初始化一起进行,如果没有适合的初始化数据可以设置为0

        3.在初始化设置变量的值时,切记不要超出数据类型对应的数据范围,不然会造成溢出

           一旦溢出程序就会报错

        4.未经过初始化的变量会导致程序报错

        5.int的包装类型为Integer

1.1.长整型变量
long a = 10L;   //由long定义的长整型变量

long b = 10l;   // 注意!!此处写的并不是101,而是10 l(后面是小写l)

// long型变量所能表示的范围:这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用
System.Out.println(Long.MIN_VALUE);
System.Out.println(Long.MAX_VALUE);

注:1.在定义长整型变量时要记得加上l或L,一般情况下不建议用小写l,

          因为在检查代码段时很难分清楚数字 ' 1 '和 小写字母 ' l ',不便于观察

        2.无论何种系统下long都是8个字节

        3.长整型的表示范围为:-2^63 ~ 2^63-1

        4.long的包装类型为Long

 1.2.短整型变量
short a = 10;
System.Out.println(a);
// short型变量所能表示的范围:
System.Out.println(Short.MIN_VALUE);  //-32768
System.Out.println(Short.MAX_VALUE);  //32767
注意:
         1. short在任何系统下都占 2 个字节
         2. short的表示范围为: -32768 ~ 32767
         3. 使用时注意不要超过范围 ( 一般使用比较少 )
         4. short的包装类型为 Short
 1.3.字节型变量
byte b = 10;
System.Out.println(b);
// byte型变量所能表示的范围:
System.Out.println(Byte.MIN_VALUE);
System.Out.println(Byte.MAX_VALUE);
注意:
         1. byte在任何系统下都占 1 个字节
         2. byte的范围是: -128 ~ 127
         3. 字节的包装类型为 Byte

现在,问题来了——为什么整型变量要进行分类呢? 

答:因为程序需求的数据字节长度不一致,对所用到的数据类型也就产生了要求。

       例如:在一个程序中用到的数据范围只在-128~127之间,这时候选择byte类型的数据即可,不需要用到int甚至字节更长的整型变量,因为这样系统在栈里开辟的空间可以小一点,避免了内存空间的浪费。————也就是说,这其实就像我们买衣服一样,衣服只要合身即可,大码或者小码都不行,大码穿着不合适还浪费,小码不合适根本穿不下。

2.浮点型变量

        浮点型变量,顾名思义就是小数点可以浮动,常用于数学运算以及一些变量的定义,浮点型变量根据精度分为:单精度浮点型(float),双精度浮点型(double)。

int a = 1;
int b = 2;

System.out.printf(a/b);

        如题,这个语句经过简单的计算后输出的结果会是多少?

        答:0。

        为什么会是0?二分之一是0.5,输出的不应该是0.5吗?

        因为在printf输出表达式中的算术表达式其变量都是整型,整型在计算后保留的结果 

        只会是整型,也就是说计算结果0.5的小数部分被舍弃了,只剩下整数部分0。

2.1单精度浮点型

        float类型在Java中占4个字节,数据精度范围比double小。

        C语言中的数据变量定义是:数据类型 变量名 = 初始值; 数据类型 变量名;

        但是!!在Java中,第二种定义方式是不允许的!!而第一种定义方式则需要看具体的数据类型。

        在IDEA中用第一种定义方式会报错,需要在10.0后面加上f或F。

 2.2双精度浮点型
double num = 1.1;
System.out.println(num * num); // 输出1.21吗?
// 执行结果
1.2100000000000002

        如上代码块的输出结果会不会出乎你的意料?是因为什么让你感到意外呢?

        答案是——double类型的数据精度。

注意:
         1. double在任何系统下都占 8 个字节
         2. 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算
         3. double的包装类型为 Double

3.字符型变量 

        字符型变量也就是由关键字char修饰的变量,由char定义的变量对应的属性可以是多种字符————数字,中文,英文大小写字母以及其他的、计算机所有的符号。

注:java中的字符可以存放整型,这一点有异于C语言。在C语言中我们要将一个整形数字存放到一个char型变量中需要进行类型转换也就是 整形数字 + ' 0 '此处的单引号0是表示字符0)。

char ch = '呵';
System.out.println(ch);

        如上代码块javac在执行时会出现以下错误:

Test.java:3: 错误 : 未结束的字符文字
char ch = '

        此时我们在执行javac时加上-encoding UTF-8选项即可

4、布尔型变量

        布尔型变量就是用来表示真假,因此取值也就只有true和false两种,true表示真,false表示假。

boolean value = true;
System.out.println(value + 1);
// 代码编译会出现如下错误
Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误
System.out.println(value + 1);
^
第一个类型: boolean
第二个类型: int
1 个错误

        Boolean类型的变量不能用于做算术计算,也不能进行数据类型转换。 

注意:1.java中的boolean类型不能和int相互转换

           2. 许多的判断表达式都是布尔表达式,在java中不存在用1或者大于0的整数结果来                     true,而0也不能用来代表false。 

           3. Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理                     boolean的字节码指令,在Oracle公司的虚拟机实现中, boolean 1 个字节。
           4. boolean的包装类型为 Boolean

四、类型的转换与提升

        java这门编程语言,当不同类型变量之间要进行相互赋值的操作时,对此有比较严谨的校验。

        因此,保险起见下要想对不同类型的数据进行相互赋值就得进行类型转换。而类型转换又分两种转换——隐式转换和显式转换。

1.自动类型转换(隐式)

     顾名思义就是代码不需要经过任何处理,经过链接后编译器自行处理。

     特点:数据范围小的转为数据范围大的时候会自动进行。

System.Out.println(1024); // 整型默认情况下是int
System.Out.println(3.14); // 浮点型默认情况下是double
int a = 100;
long b = 10L;
b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全
float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失

2.强制类型转换(显式)

        强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。
        特点:数据范围大的到数据范围小的。
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
boolean flag = true;
a = flag; // 编译失败:类型不兼容
flag = a; // 编译失败:类型不兼容
注意:
         1. 不同数字类型的变量之间赋值 , 表示范围更小的类型能隐式转换成范围较大的类型
         2. 如果需要把范围大的类型赋值给范围小的 , 需要强制类型转换 , 但是 可能精度丢失
         3. 将一个字面值常量进行赋值的时候 , Java 会自动针对数字范围进行检查
         4. 强制类型转换不一定能成功,不相干的类型不能互相转换

3.类型提升 

        不同类型的数据进行算术运算时,数据类型小的会被提升为数据类型大的。

        例如:int和long之间的算术表达式所计算的结果会是long类型。

特别注意:

        short和short、byte与byte类型之间的算术计算会出错误,因为在进行计算时编译器会把byte类型的数据提升成int型,short也是同理,因为short只占2个字节,byte只占1个字节,都小于四个字节,所以编译器在计算时会现将小于四个字节的数据提升到四个字节的数据类型。

五、字符串类型 

        C语言中不管是字符还是字符串都用char来定义存储。不同于C语言,java中有关键字String修饰变量用于存储字符串。

        有趣的一点是,C语言用ASCII表示字符,而在对char类型的变量做加减法时是用对应符号的ASCII码值去进行运算而后把运算完的结果再将ASCII码值打印出相对应的符号

1. int 转成 String
int num = 10;
// 方法1
String str1 = num + ""; 
// 方法2
String str2 = String.valueOf(num);

2. String 转成 int

String str = "100";
int num = Integer.parseInt(str);

**************************************************************************************************************

**************************************************************************************************************

**************************************************************************************************************

**************************************************************************************************************

好啦,看到这留个三连在离开吧,球球辣,拜托拜托!!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值