中科因仑“3+1”工程特种兵精英论坛

标题: 【Java学习】5、Java基本数据类型 [打印本页]

作者: dong    时间: 2018-4-8 21:11
标题: 【Java学习】5、Java基本数据类型
5、Java基本数据类型一、基本类型不牵扯内存分配问题,4类8种:
(1)整型:int、short、long、byte。             默认值0
(2)浮点型:float、double。                          默认值0.0
(3)字符型:char。                                        默认值’\u0000’
(4)布尔型:boolean。                                 默认值false
二、引用类型需要开发者为其分配空间
引用类型包括类、接口、枚举和数组类型、null类型。

空引用null只能被被转化为引用类型,不能转化成基本类型,因此,不能把一个null值赋给基本类型的变量。
备注:
(1)  字符串类型是一个类,即引用类型
(2)  选择原则
a)      如果要表示整数就使用int,表示小数就使用double;
b)      如果要描述日期时间数字或者表示文件(或内存)大小用long;
c)      如果要实现内容传递或者编码转换使用byte;
d)      如果要实现逻辑的控制,可以使用booleam;
e)      如果要使用中文,使用char避免中文乱码;
f)        如果按照保存范围:byte < int < long < double;

三、整型1、整型变换新建类Integral.java,整型*整型结果还是整型,运行程序
    public class Integral {
    /**
    *整型
    *@param args
    */
    public static void main(String[] args) {
       //2是一个整数(不会改变的量,称之为常量)
       //程序中任何一个整数对应的类型都是int
       int num = 2; //声明一个int型变量
       //num是int型的变量,num*2是int型的常量,也是int型
       System.out.println(num * 2);
    }
}
       结果输出
        略
       结果还是int类型。
2、整型数据溢出       编辑类Integral.java,数据在最大值+1和最小值-1。运行程序
    public classIntegral {
    /**
    * 整型
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       intmaxValue = Integer.MAX_VALUE;  // 取得最大值
       intminVlaue = Integer.MIN_VALUE;  // 取得最小值
       System.out.println(maxValue);
       System.out.println(minVlaue);
       // maxVlaue属于整型,int变量 + int型常量 = int
       System.out.println(maxValue+1);
       System.out.println(minVlaue-1);
    }
}
       结果输出
        
       结果最大值+1等于最小值了,最小值-1等于最大值。形成了一个循环

3、解决整型数据溢出       唯一解决方案就是用long类型,将maxValue的值赋值给long类型,编辑类Integral.java,运行程序
public class Integral{
    /**
    * 整型
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       intmaxValue = Integer.MAX_VALUE; // 取得最大值
       intminVlaue = Integer.MIN_VALUE; // 取得最小值
       // 程序的执行,都是由等号的右边到左边,这样计算是将maxVlaue的值+1之后,把结果赋值给result,结果还是为最小值
       long result1 = maxValue + 1;
       System.out.println(result1);
       // 方法一:将maxValue强制转换为long之后进行运算,long类型 + int类型常量 = long类型
       long result2 = (long)maxValue + 1;
       System.out.println(result2);
       // 方法二:先将maxValue的值赋值给resultValue之后,结果就是long类型,再+1,就是maxValue+1的值了,就不是最小值了
       long result3 = maxValue;
       System.out.println(result3 + 1);
    }
}
       结果输出
   
       这样,整型的数据溢出就不存在了。

4、大类型转小类型       定义一个long类型的数据,用来转换为int类型,编辑类类Integral.java,运行程序
public class Integral{
    /**
    * 整型
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       // 任何的整数其默认的类型都是int,如果该整数的值超过了int类型可以保存的数据范围,
       // 需要将这个数据明确的表示为long类型,在数据后面加一个“l”“L”,推荐使用L
       longl = 2147483648L;
       int result = (int) l; //大的类型变小的类型,必须强制转换
       System.out.println(result);
    }
}
结果输出
因为表示的最大值+1了,所以输出最小值了。

5、数据类型默认值       所有的数据类型都有默认值,但是在主方法中,默认值无效,必须赋值。赋值可以在定义的时候,也可以在使用之前赋值。在使用前赋值,在老版本的JDK中也是会出错,所以最保险的做法是在声明变量的时候,直接赋值。编辑类类Integral.java,运行程序
public class Integral{
    /**
    * 整型
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       int num;// 定义一个int类型的变量
       num = 10;// 在输出之前进行赋值
       System.out.println(num);// 在低版本的JDK中,可能会出错
       int i = 20;// 定义一个值为20int类型的变量,推荐这样使用默认值
       System.out.println(i);
    }
}
结果输出


6、byte数据类型       范围在保存的数据范围-128-127之间,编辑类类Integral.java,运行程序
public class Integral{
    /**
    * 整型
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       // 10intint范围要大于byte,那么理论上需要进行强制转换;这里不需要,因为其数据量服务byte的要求
       byte b = 10;// 10int类型,在byte范围内
       System.out.println(b);
           byte b2 = (byte) 128;//b2赋值内容大于127+1的话,变为最小值
           System.out.println(b2);
           int i = 10; // 10int范围内
           byte b3 = (byte) i; // 需要强制转换,
           System.out.println(b3);
    }
}
       结果输出
              略
       如果赋值的byte的范围,就需要进行强制转换。如果将int值赋值给byte,那么要求只能够是int常量,不能是int变量。如果需要,则需将byte强制转换为int类型。


四、浮点型       如果需要表示小数,则需要使用浮点型。默认类型是double类型。新建类FloatType.java,编辑类FloatType.java,运行base方法
public classFloatType {
    /**
    * 浮点型
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       base();// 运行base方法
    }
    private static void base() {
       double d = 5.2; // 这是一个小数,默认类型为double
       // ddouble类型 * int类型常量 = double类型
       // num* 2.0(由int类型变为double类型)
       System.out.println(d * 2);
    }
}
结果输出
       double类型保存的数字范围是最大的,能保存最大的有意义的数字。如果不能确定你需要保存的数字范围,可以选择使用double。也可以使用float表示小数,其范围要小于double,且默认的是double,所以如果要直接声明float变量,可以在数字后加一个“F”或“f”。新建方法floatBase();运行程序
        privatestatic voidfloatBase() {
       floatf1 = 1.5f;
       // float类型 * int类型常量 = float类型
       System.out.println(f1 * 2);
       System.out.println(f1 * f1);
       System.out.println(1.1* 1.1); //传统BUG
        }
       结果输出
              略
       这个bug一直存在,可以保留两位小数即可。

       Int类型的计算,有时会存在小数,新建方法intCalculation(),运行程序
        private staticvoid intCalculation() {
           int i1 =20;
           int i2 = 6;
           // int类型 / int类型 = int类型
           System.out.println(i1/ i2);
           // 如果需要准确的计算,那么至少保证一个类型是double或者是float类型
           System.out.println((double)i1 / i2);
        }
       结果输出
              略
       Java进行除法计算的时候,都需要注意数据类型。

五、字符型       在项目中,用概念比较多,真正使用到的情况比较少。使用char进行表示,用单引号来声明变量的内容,而且字符型可以和int类型进行相互转换。新建方法charBase(),运行程序
public class CharType{
    /**
    * 字符型
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       charBase();
    }
    /**
    * 字符型的定义
    */
    private static void charBase() {
       char c = 'A'; // 定义一个char类型
       System.out.println(c);
       int i = c;// char赋值给int类型
       System.out.println(i);
    }
}
       结果输出
              略
       常用范围
              大写字母            A-Z              (65<A> - 90<Z>)
              小写字母            a-z        (97<a> - 122<z>)
              字符数字            0-9        (48<0> -57<9>)
       中间相差32长度,实现大写字母和小写字母之间的相互转换。字符0和数字0是两个概念。新建方法charChange(),运行程序
        privatestatic voidcharChange() {
       charc = 'A' +32;// A转换为a
       System.out.println(c);
       charc2 = '0';
       // 字符变量 + int常量 = int类型
       int i = c2; // 将字符变为int类型
       System.out.println(i);
       // 需要将int类型的内容转换为char类型,强制转化即可
       charc3 = (char)i;// 强制转换
       System.out.println(c3);
        }
       结果输出
              略
       所以字符0等于整型的48。各种语言都有相似的编码,称之为ASCII码,Java中使用的是UNICODE编码,UNICODE所包含ASCII码,可以保存任何的文字信息,包括中文。新建方法charUnicode(),运行程序
        privatestatic voidcharUnicode() {
       char c = '';// 定义一个字符
       int i = c;// 将字符转换为int类型
       System.out.println(i);
        }
       结果输出
              略
       所以在Java中中文‘彭’字存放的数字表示为24429。

六、布尔型       布尔是一位数学家的名字,发明了两个单词,true和false,用来表示计算的逻辑结果。条件满足返回true,条件冲突返回false,新建类BooleanType.class,运行程序
public classBooleanType {
    publicstatic voidmain(String[] args) {
       booleanBase();
    }
    /**
    * 基本介绍
    */
    privatestatic voidbooleanBase() {
       booleanb1 = 10 > 2; //true 表示条件满足
       boolean b2 = 10 < 2;// false 表示条件不满足
       if(b1) {
           System.out.println("Hello enlern");
       }
    }
}
       结构输出
              略
       在其他语言中,如果没有boolean类型,就用数字表示,比如0表示false,1表示true。

七、字符串       char只能表示单一字符,但是多个字符就需要String来表示。String并不是基本类型,是一个引用数据类型。但是它可以按照基本类型的使用模式。String上可以使用“+”,作用是表示两个字符串的连接。新建类StringType.java,运行程序
public classStringType {
    /**
    * 字符串String
    *
    * @param args
    */
    publicstatic voidmain(String[] args) {
       baseString();
    }
    /**
    * 基本概念
    */
    privatestatic voidbaseString() {
       String s1= "shanghai"; // 定义一个字符串
       String s2= "enlern";// 定义一个字符串
       System.out.println(s1 + s2);
    }
}
       结果输出
              略
       如果既有字符串相加,也有数字相加,新建方法stringSum(),运行程序
        /**
        *字符串相加,数字相加
        */
    private static void stringSum() {
       int i1 = 10;// 定义一个int类型
       int i2 = 4;// 定一个int类型
       System.out.println("sum = " + i1+ i2);
        }
       结果输出
              略
       此时不是数学计算,是字符串相加了。一旦基本类型与String相加操作,都会变成String字符串的拼接。如果要表示数字想“+”的话,可以使用括号解决。在字符串相加中有几个特殊的字符,为转义字符。如下
              \\反斜杠
\t 间隔 ('\u0009')
\n 换行 ('\u000A')
\r 回车 ('\u000D')
新建stringSymbol(),运行程序
        /**
        *转义字符
        */

    private staticvoid stringSymbol() {

System.out.println("熊孩子\n\"用脚猛蹬电梯门\"下一秒门爆裂冒出巨大白烟");
        }
结果输出
              略
       可以使用转移字符对字符串进行格式化。






欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4