章节三 Java数据类型划分

课时七    Java数据类型的划分(简介)

1.知识点:
        (1)java中各个数据类型的定义;
        (2)java各种数据类型的使用;
        (3)观察String类型的使用。

2.具体内容(重点
        任何的程序严格来讲都属于一个数据的处理游戏。所以对于数据的保存就必须有严格的限制,这些限制就体现在数据类型的划分上,即:不同的数据类型可以保存不同的数据内容。

                                              (背下来)
        基本数据类型不牵扯到内存分配问题,而引用数据类型需要开发者为其分配空间,而后进行关系的匹配。
        基本数据类型一共分为八种,引用数据类型一共分为三种。那么这么多数据类型该如何选择呢?
个人选择数据类型原则(他人总结):

  • 如果想表示整数就使用int,表示小数就使用double;
  • 如果要描述日期时间数字或者表示文件(或内存)大小使用long;
  • 如果要实现内容传递,或者是编码转换使用byte;
  • 如果想实现逻辑的控制,可以使用boolean描述;
  • 如果想表示中文,使用char。

        如果按照保存范围:byte < long < double .

课时八    Java数据类型的划分(整型)

        任何一个数字常量(例如10、30、100)都属于int类型,即:在java中所有设置的整数内容都默认为int型。
范例:定义int变量


public class Testdemo
{
public static void main(String args[])
{
//为变量设置内容使用如下格式:
//数据类型 变量名称 = 常量;
int num = 10;//10是常量,默认类型为整型
int result = num*2;//将num中的内容乘以2,再将结果赋值给result
System.out.println(result);
}
}

定义完变量之后,可对变量做四则运算。


        变量与常量最大的区别只有一个:常量的值不可变,变量的值是可变的。

public class Testdemo
{
public static void main(String args[])
{
int num = 10;//10是常量,默认类型为整型
int num = num*2;//将num中的内容乘以2,再将结果赋值给变量num
System.out.println(num);
}
}

        每一种数据类型都有自己所对应的保存范围,
范例:如果超过了int的最大值或最小值的结果

public class Testdemo
{
public static void main(String args[])
{
int max = Integer.MAX_VALUE;//取出整型范围的最大值:2147483647
int min = Integer.MIN_VALUE;//取出整型范围的最小值:-2147483648
System.out.println(max);
System.out.println(min);
//int变量 +/- int变量 = int变量
System.out.println(max+1);//最大值加1:-2147483648(最小值)
System.out.println(min-1);//最小值减1:2147483647(最大值)
System.out.println(min-2);//最小值减2:2147483646(第二大值)
}
}


        最大值如果继续增加就变成了最小值,随后一直像其次的最小值进行循环,反之最小值减1就变成了最大值。因为任何的数据计算都是按照二进制计算的,第一位是符号位,而其他的31位都是数据位。符号位上的1表示正数,0表示负数,当最大值加1时会发生进位,则符号位会由正数变为负数。
        这种现象称为数据的溢出,若想解决这种溢出的问题,就只能通过扩大0数据范围来实现。比int 范围更大的是long 类型。
范例:扩大数据类型

public class Testdemo
{
public static void main(String args[])
{
int max = Integer.MAX_VALUE;//取出整型范围的最大值:2147483647
int min = Integer.MIN_VALUE;//取出整型范围的最小值:-2147483648
System.out.println(max);
System.out.println(min);
//int变量 +/- long变量 = long变量
System.out.println(max+1L);//最大值加1:2147483648
System.out.println(min-1L);//最小值减1:-2147483649

}
}


在程序的世界里面,数据类型的转换有以下规律:
        * 数据范围小的数据与数据范围大的数据进行数学计算的时候,自动向大范围的数据类型转换,然后再进行计算。
        * 数据范围大的数据要变为数据范围小的数据,那么必须采用强制转换;
        * 当常量进行强制转换时,有两种方法:常量标记(在常量后加上L或l之类的标记)、使用"(数据类型) "。
        以上代码利用了数据的转型姐居然了数据的操作错误,但是对于程序而言,除了可以将数据范围小的数据类型变为数据范围大的数据类型,也可以将数据范围大的数据类型变为数据范围小的数据类型。


范例:将数据范围大的数据类型转换为数据范围小的数据类型

public class Testdemo
{
public static void main(String args[])
{
long num = 1000;//1000常量是int类型,使用long类型接受,发生了向范围大的数据类型转换
int x = (int)num;//确定num的值在int类型的范围内,将long新类型强制转换为int型
System.out.println(x);
}
}

        如果将long变为int是所保存的数据超过 int的范围,那么依旧会出现数据溢出的现象。

public class Testdemo
{
public static void main(String args[])
{
long num = 2147483650L;
int x = (int)num;//将long类型转换为int型
System.out.println(x);
}
}

面试题(越简单越小心!)

public class Testdemo
{
public static void main(String args[])
{
System.out.println(11 + 1l);
}
}

        结果为12,因为在word里很难看出数字1与字母l的差别,所以遇上简单的题要格外小心。

        在整型数据中,byte型数据是非常有用处的数据类型,首先对于byte型数据他的取值范围:-128~127之间。
范例:观察byte的转换问题

public class Testdemo
{
public static void main(String args[])
{
int num = 130;//此范围超过了byte定义
byte x = (byte)num;//由int变为byte
System.out.println(x);
}
}

 结果:-126 溢出
        但是由于byte使用的特殊性,java对其有了一些很好的改善。
范例:观察byte操作

public class Testdemo
{
public static void main(String args[])
{
byte num = 100;//100是int型常量,这里将范围大的数据类型向范围小的数据类型转换,应当使用强制类型转换。
System.out.println(num);
}
}

        虽然任何一个证书都属于int型,但是java 编译时,如果发现使用的数据变量类型为byte,并且设置的数据类型不在byte数据范围之内,那么就会自动的帮助用户实现数据类型的转换。反之,如果超过了,则依然会以int型为主。
提示:所有的变量在使用的时候都不要去相信默认值,都自行设置内容。

public class Testdemo
{
public static void main(String args[])
{
int num;//没有赋值,理论上是默认值0,但不自己赋值编译时会报错。
num = 0;//自己给变量赋值
System.out.println(num);
}
}

        以上的操作形式属于先定义一个变量num,但是此变量设置内容,而后设置num的内容,最后再使用此变量,可是以上代码在JDK 1.4 及以前的版本是无法编译通过;因为他们不支持分成两步写。最好是在定义变量的同时就给它初始化。

课时九    Java数据类型的划分(浮点型)

        浮点数是小数,java中只要是小数,其类型就是double型(double是保存范围最广的数据类型)
范例:定义小数

public class haha
{
public static void main(String args[])
{
double num = 10.2;//10.2是一个小数,所以他是一个double型。
System.out.println(num*2);//double型 * int型 = double型
}
}

         由于默认的小数类型就是double,所以如果使用了float表示,需要将double型变为floa型需要采用强制转换。
范例 :使用float型

public class haha
{
public static void main(String args[])
{
//转换方式1:末尾加‘F’
float f1 = 10.2F;//10.2是一个小数,所以他是一个double型。
//转换方式2:前面加括号以及数据类型
float f2 = (float)10.2;
System.out.println(f1 * f2);//结果为104.03999
}
}

        但是发现最终的结果有一点问题,变为了‘104.03999’(后面这个9现在还算少的,以前更多)这个bug自JDK1.0就存在,只能通过后期的处理去解决。
        tips:实际上最早开发的时候,考虑到内存问题,往往能使用float就不使用double,例如当时的手机开发(J2ME)由于内存苛刻,往往会压缩数据范围,以节约空间。现在随着硬件成本的降低,所以使用float类型与double类型的区别就不大了,那么久直接使用double数据。


        需要注意的是,所有的数据类型只有double才可以保存小数。观察下面的代码:

public class haha
{
public static void main(String args[])
{
int x = 9;
int y = 5;
System.out.println(x/y);//结果为1
}
}


        此时如果进行除法计算,发现最终的计算结果为1,因为int不保留小数位。可以做如下改变以精确结果:

public class haha
{
public static void main(String args[])
{
int x = 9;
int y = 5;
System.out.println(x/(double)y);//强制转换x或者y都可以,只要有其中一个是大范围数据类型,结果就会由int型变为double型

}
}

         在以后的开发之中,一定要考虑到整型不保留小数位的问题。

课时十    Java数据类型的划分(字符型)

        byte是属于字节,按照传统的概念来讲,一个字符=2个字节。对于字符除了与字节有一些关系之外,最主要的关系在于与int型变量的转换。
        在计算机的世界里面一切都是编码的形式出现的,Java使用的是十六进制的UNICODE编码,此类编码可以保存任意的文字。但是这个编码在设计的过程之中,考虑到与其他语言的结合问题,在此编码里面包含了ASCII码的部分编码。
        在程序之中使用‘ ’声明的内容称为字符,每一个单引号里面只能保存一位字符。

public class Testdemo
{
public static void main(String args[])
{
char c = 'A';//字符
//字符与int型相互转换,以编码的形式出现
int num = c;
System.out.println(num);
System.out.println(c);
}
}

经测试发现如下编码情况:
* 'A'(65) ~ 'Z'(90)
* 'a'(97) ~ 'z'(122)
* '0'(48) ~ '9'(57)
其中'A'的编码值要比'a'小32,所以可以利用简单的数学计算实现大小写转换。
范例:实现大小写字符转换过程

public class Testdemo
{
public static void main(String args[])
{
char c = 'A';//大写字符
//字符与int型相互转换,以编码的形式出现
int num = c;//字符A的编码
num = num+32;//转换成字符a的编码
c = (char)num;//小范围向大范围转换需要强制转换
System.out.println(num);
System.out.println(c);
}
}

        传统的编程语言中,字符里面只能保存一些英文字母的标记。但是在java之中,由于使用了UNICODE编码,这种十六进制的编码可以保存任意的文字,可以设置一个中文字符。

public class Testdemo
{
public static void main(String args[])
{
char c = '陈';//中文字符
//字符与int型相互转换,以编码的形式出现
int num = c;//获取中文字符的编码
System.out.println(num);
}
}

课时十一   Java数据类型的划分(布尔型)

        布尔是一个数学家的名字,布尔型是一种逻辑结果,主要保存两类数据:true、false,这类数据主要用于一些逻辑使用上。
范例:观察boolean

public class Testdemo
{
public static void main(String args[])
{
//布尔只有两种值:true、false
boolean flag = true;
if(flag) //if(布尔值){满足条件的操作}
{
System.out.println("Hello world!");
}

}
}

        在许多的语言之中,由于设计的初期没有考虑到布尔型的问题,救赎用了数字0表示false,而非0 数字就表示true。

        在java中不允许用用数字0或1来填充布尔型 的变量内容。

课时十二    Java数据类型的划分(String型)

String表示的是一个字符串,即:多个字符的集合,String要求使用“ ”(双引号)声明其内容。
范例:观察String操作

public class Testdemo
{
public static void main(String args[])
{
String str = "Hello world!";//字符串变量
System.out.println(str);
System.out.println("Hello world!");//字符串常量
}
}

在String的操作里面可以使用加号('+')进行字符串的链接操作。
范例:字符串的链接

public class Testdemo
{
public static void main(String args[])
{
String str = "Hello ";
str+="World! ";//连接方式一
str = str + "haha";//连接方式二
System.out.println(str);
}
}

数学计算里面有加号('+'),字符串里面也有加号('+'),那么如果一起使用呢?

public class Testdemo
{
public static void main(String args[])
{
int numA=100;
double numB=99.0;
String str = "加法计算:"+numA+numB;
System.out.println(str);
}
}

结果为加法计算:10099.0


        从之前的数据类型来说,任何的数据类型都向范围大的数据类型进行转变;如果是int 和double类型进行计算,那么int要先变为double,而后进行加法计算,但是如果遇见了String,那么一切就都变了,可以简单理解为,所有的数据类型如果遇见了 String类型的('+')操作,那么所有的数据类型都先变为String类型数据,而后执行字符串的链接操作。此时,只能通过括号来改变结果。(括号的优先级最高)
范例:运用括号以后

public class Testdemo
{
public static void main(String args[])
{
int numA=100;
double numB=99.0;
String str = "加法计算:"+(numA+numB);
System.out.println(str);
}
}

结果为加法计算:199.0

        在java里面也支持多种转移字符的使用,例如:换行(\n)、制表符(\t)、斜线(\\)、双引号(\")、单引号(\')。
范例:转义字符

public class Testdemo
{
public static void main(String args[])
{
String str="hello \"haha\" \n你好";
System.out.println(str);
}
}



总结:
1.整数用int,小数用double,逻辑用boolean
2.long、byte、char在处理数据的时候会使用到;
3.数据类型的自动转换永远都是小范围向大范围转换,如果大范围向小范围转换要进行强制转换。
4.int和char之间的互相转换是以编码为主的,大写字母和小写字母之间只差了32个长度。
5.String是一个特殊的类,用于描述字符串,字符串使用" "(双引号)声明,利用加号("+")实现字符串链接

猜你喜欢

转载自blog.csdn.net/baidu_39115323/article/details/81268338
今日推荐