Java基础4-变量和数据类型(基本数据类型间转换)

一、变量

1.什么是变量?

*变量本质上说是内存中的一块空间,这块空间有数据类型,有名字,有字面值
*变量包含三部分:数据类型、名称、字面值【数据】
*变量是内存中存储数据的最基本的单元

内存空间得到了重复使用

定义变量的格式:

数据类型 变量名=初始化值;

public class variable
{
    public static void main(String[] args){
        int j=100;
//数据类型:int    变量名:j   字面值为:100 
        System.out.println(j);
    }
}

2.变量的分类

变量分为局部变量、成员变量

在方法体外【类体之内】声明的变量 称为成员变量。

在方法体中中声明的变量为局部变量。

public class variable
{
        int c;
// c为成员变量,在类体中声名,成员变量默认赋值
    public static void main(String[] args){
        int i;
        //变量i为局部变量,在方法体中声明,要赋值初始化否则
        //编译报错:变量i没有初始化
        i=100;
                //声明的变量可以重复赋值
            for(int i=0;i<10;i++){
              //在不同作用域中变量名可以相同
             //java遵循就近原则
             System.out.println(i);
            }
        System.out.println(i);
    }
}                    

3.什么是作用域?

*变量的作用域描述的就是变量的有效范围

*在什么范围内可以被访问,出了这个范围不能访问
*变量作用域只要记住一句话:出了大括号就不认识了。

public class variable
{
        int c;
// c为成员变量,作用域为整个类
    public static void main(String[] args){
        int i;
        //变量i为局部变量,作用域为主方法中
        i=100;
                //声明的变量可以重复赋值
            for(int i=0;i<10;i++){
              //在这个for循环中变量i只在这个循环中作用
             //java遵循就近原则,这里打印输出for循环中定义的i
             System.out.println(i);
            }
//这里打印输出主方法中声明的i 因为for循环中声明的i出了for循环这个作用域就无法访问到了
        System.out.println(i);
    }
}   

二、数据类型

1.数据类型的种类

数据类型主要分为:基本数据类型和引用数据类型两种

①基本数据类型(8种):

a数值型:

*整数型:(byte/short/int/long)

*浮点型:(float/double)

b字符型:char

c布尔型:boolean

②引用数据类型

*类

*数组

*接口

2.八种基本数据类型范围

NO.

数据类型

大小/

可表示范围

默认值

1

byte(字节)

8

-128~127

0

2

short(短整型)

16

-32768~32767

0

3

int(整型)

32

-2147483648~2147483647

0

4

long(长整型)

64

-9223372036854775808~9223372036854775807

0

5

float(单精度)

32

-3.4E38~3.4E38

0.0

6

double(双精度)

64

-1.7E308~1.7E308

0.0

7

char(字符)

16

0~255

‘\u0000’

8

boolean(布尔)

-

true false

false

3.数据类型的作用

*不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间
*数据类型是指导程序在运行阶段应该分配多大的内存空间。

4.java语言中的整数型

*java语言中,整数型字面值被默认当做int类型来处理。
要让整数型字面值被当做long类型来处理,需要在整数型字面值后面添加l/L,建议使用大写L

①java语言中整数型常量有三种表示方式

  • 10进制
  • 8进制,8进制以0开头,例如:012.
  • 16进制,16进制以0x开头,例如:0x123.

5.基本数据类型之间的转换

1.除布尔类型外其他7种可以互相转换
2.小容量向大容量转换,自动类型转换
byte<short<int<long<float<double
         char<
注:任何浮点类型不管占用多少个字节,都比整数型容量大。
char和short可表示的种类数量相同,但是char可以取更大的正整数
3.大容量转换成小容量,叫做强制类型转换需要加强制类型转换符,程序才能编译通过,但是运行阶段会损失精度
4.当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char
5.byte,short,char混合运算的时候,各自先转换成int类型再做运算
6.多种数据类型混合运算,先转换成容量最大的那种类型再做运算。

class note05
{
    public static void main(String[] args){
    long x=456;
    //456整数型字面值被当做int类型
    //x变量在声明时是long类型,占用8个字节
    //int类型的字面值456赋值给long类型的变量x,存在类型转换
    //从小容量转换成大容量自动转换
    System.out.println(x);
    long y=2147483647;
    //2147483648被当做int类型,4个字节,但是字面值超过int类型范围需在后边加L
    //2147483648L是8个字节的long类型
    long z=2147483648L;
    System.out.println(z);
    long v=100L;
    //100L是long类型字面值,v是long类型变量,不存在数据类型转换直接赋值
    //int o=v;
    //从大容量转到小,不能直接赋值给小容量,所以int o=v不可以
        int o=(int)v;
    //需要强制类型转换,需要加强制类型转换符将v转换成int类型再赋值给int类型的o
    //加上强制类型转换符编译可通过,但运行阶段可能损失精度
    //强转原理:
    //原始数据:0000000 00000000 00000000 00000000 00000000 00000000 00000000 00100100
    //强转之后的数据:00000000 00000000 00000000 00100100
    //将左边的二进制砍掉,【所有数据都是这样完成的】
    byte p=50;
    //没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量。
    /*关于浮点型数据类型
    float 单精度【4个字节】
    double 双精度【8个字节,精度较高】
    double精度太低【相对来说】,不适合做财务软件。
    涉及到财务,要求精度较高,所以sun在基础se类库中准备了精度更高的类型,是一种引用数据类型
    它是:java.math.BigDecimal(欲知后事,请持续关注)
    java程序中sunsun提供了一套庞大的类库,java程序员是基于这套基础的类库来进行开发的
    在java语言中,所有的浮点型字面值,默认被当作double类型来处理,
    要想该字面值以float类型来处理,需要在字面值后面添加F/f
    注意:
    double和float在计算机内部二进制存储的时候都是近似值。
    */
         double d=3.0;
    //3.0是double类型的字面值
    //d是double类型
    //不存在数据转换
    System.out.println(d);
    //5.1是double类型的字面值
    //f是float类型的变量
    //大容量转换成小容量需要加强制类型转换符,所以以下程序编译错误
    //解决方案
    //float f=float(5.1);
    //第二种方式:没有类型转换
    float f=5.1;
    }
}

附常见基本数据类型转换的错误和注意点

class note06
{
    */
    //出现错误,1000超出了byte的范围
//byte a = 1000;
//正确,因为20没有超出byte范围
//所以赋值
byte a = 20;
//变量不能重名
//short a = 1000;
//正确,因为数值1000没有超出short类型的范围
//所以赋值正确
short b = 1000;
//正确,因为默认就是int,并且没有超出int范围
int c = 1000;
//正确,可以自动转换
long d = c;
//错误,出现精度丢失问题,大类型-->>小类型会出现问题
//int e = d;
//将long强制转换成int类型
//因为值1000,没有超出int范围,所以转换是正确的
int e = (int)d;
//因为java中的运算会会转成最大类型
//而10和3默认为int,所以运算后的最大类型也是int
//所以是正确的
int f = 10/3;
//声明10为long类型
long g = 10;
//出现错误,多个数值在运算过程中,会转换成容量最大的类型
//以下示例最大的类型为double,而h为int,所以就会出现大类型(long)到小类型(int)
//的转换,将会出现精度丢失问题
//int h = g/3;
//可以强制转换,因为运算结果没有超出int范围
//int h = (int)g/3;
//可以采用long类型来接收运算结果
//long h = g/3;
//出现精度损失问题,以下问题主要是优先级的问题
//将g转换成int,然后又将int类型的g转换成byte,最后byte类型的g和3运算,那么
//它的运算结果类型就是int,所以int赋值给byte就出现了精度损失问题
//byte h = (byte)(int)g/3;
//正确
//byte h = (byte)(int)(g/3);
//不能转换,还有因为优先级的问题
//byte h = (byte)g/3;
//可以转换,因为运算结果没有超出byte范围
//byte h = (byte)(g/3);
//可以转换,因为运算结果没有超出short范围
short h = (short)(g/3);
short i = 10;
byte j = 5;
//错误,short和byte运算,首先会转换成int再运算
//所以运算结果为int,int赋值给short就会出现精度丢失问题
//short k = i + j;
//可以将运算结果强制转换成short
//short k = (short)(i + j);
//因为运算结果为int,所以可以采用int类型接收
int k = i + j;
char l = 'a';
System.out.println(l);
//输出结果为97,也就是a的ascii值
System.out.println((byte)l);
int m = l + 100;
//输出结构为197,取得a的ascii码值,让后与100进行相加运算
System.out.println(m);
    
    }
}
数据类型转换

6.String字符砖类型

String字符串类型不属于基本数据类型,它是一个类,属于引用数据类型,

本质是一个字符类型的数组 char[] value={};以后再说。

String型的使用需要双引号""

String a="你好美女";

char b='国';

一个中文占用2个字节,char正好是占用两个字节。

 

posted @ 2018-04-05 16:13  LuckyGJX  阅读(311)  评论(0编辑  收藏  举报