JAVA学习2---JAVA基本数据类型

1、JAVA的变量命名规则

1.1 基本规则
  • 名称只能由字母、数字、下划线、$符号组成
  • 不能以数字开头
  • 名称不能使用JAVA中的关键字。
  • 区分大小写
1.2 其他规则
  • 类和接口 的名称应该是名词,在含有多个单词的情况下,每个内部单词的第一个字母大写。最好使用完成单词,避免缩写,接口类型通常以大写字母I开头
  • 方法 的名称应该是动词,在含有多个单词的情况下时,第一个单词的首字母小写,其余单词的首字母大写。
  • 常量 所有的单词都用大写形式来表示,并且单词间通过下划线 _ 来分割
    如:PI
  • 惟一包名的前缀总是用全小写ASCII字母编写,应该是顶级域名之一,如com、edu、gov、mil、net、org。 包名称的后续组件根据组织自身的内部命名约定而变化。

2、JAVA的基本类型

     java的数据类型主要分为两类:值类型和引用类型。
     值类型主要分为:整型、浮点型、字符型
     引用类型主要分为:字符串类型、类类型、接口类型、数组类型

在这里插入图片描述
在这里插入图片描述

注意: java的整型和机器的平台无关,不像C语言和C++整型在16为处理器上int 占用2个字节,在32位处理器上占用4个字节。

2.1 整数类型

整型按照所占字节大小来分,从小到大依次为:byte(1)—>short(2)–>int(4)–long(8)

一般来说在处理底层文件的时候,需要使用byte,但是编程中最常用的基本类型是int,long类型表示大数据,比如中国的人口数目时候,一般可以通过加后缀L或者l来直观的显示long类型。

Tip:
	但是我们知道long在最大的范围是2^63-1,但是在表示天文距离光年的时候,远远不够,这个时候该怎么办呢,java.math里的BigInt类正好可以解决这个问题。    
2.2浮点数类型

浮点数类型按照大小来分:float(4)---->double(8)

一般来说程序中大都时候,会优先采用 double 类型,而不是float类型,这个时候你可能会有疑问,使用double类型占用的字节多,不是会造成更多的浪费吗?要说明这个问题,我们首先了解计算机中浮点数据是怎么表示的。

我们知道计算机中所有的数据都是采用0和1表示的,也就是2进制表示,假设是个整数,那么怎么表示都不会有精度的损失,(这真是废话,都整数了还有啥精度),但是用2进制表示来表示浮点数据,遇到能被2整除干净的还好,如4.0,4.2,4.8,但是像4.21这种,无论你怎么划分,最后总是会有无法除尽的情况,所以只能用更多的数据位来保证精度在一定范围呢。正因如此,我们在使用计算机操作浮点数的时候,优先采用占用字节多的double 来保证浮点数的精度。
基于以上,我们在需要注意以下两个问题:

2.1.1 浮点数据相等判断

直接看代码:

public static void main(String[] args)
    {
        float a1=4.2f;
        double a2=4.2d;

        //除以整数同类型比较
        System.out.println(a1/2==2.1f);//true
        System.out.println(a2/2==2.1d);//true
        //不同类型结果比较
        System.out.println(a1/2==a2/2);//false
        //除以小数比较
        System.out.println(a1/0.6==7);//false
        System.out.println(a2/0.6==7);//false
    }

what?明明a1/0.6是4.2/0.6=7啊,为啥java告诉我不相等呢,为啥4.2f/2和4.2d/2还不相等呢,这就是精度问题了啊,那这个时候该如何判断相等?简单指定在精度范围呢就任务相等好了, 假设我们任务小于0.000001是相等,运行如下代码,都是相等了。

  public static void main(String[] args)
    {
        float a1=4.2f;
        double a2=4.2d;
        //不同类型结果比较
        System.out.println(Math.abs(a1/2-a2/2)<0.000001);//true
        //除以小数比较
        System.out.println(Math.abs(a1/0.6-7)<0.000001);//true
        System.out.println(Math.abs(a2/0.6-7)<0.000001);//true
    }
2.1.2 高精度问题怎么用

假设你也成功找到了工作,到了一家银行或者证券公司上班,需要计算机计算大量的财务问题,如果采用java 即是用了double进度来计算问题,假设每天的需要流动的资金在一个亿左右。这就带来个问题,一个亿每天因为小数点的问题,可能要么你的公司要占点客户的便宜,要么你的公司被客户占了不少便宜,这样日积月累,必然会造成很大的问题。所以为了保证财务的运算精度或者其他精度要求很高的计算场合,就需要新的数据类型,这个时候java.math 提供了BigDecimal类。

2.1.3 无穷大和NAN

在java中,float 类型数据和double 类型数据都有正负无穷大和NaN(非数),其定义如下:

 public static final float POSITIVE_INFINITY = 1.0f / 0.0f;
 public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
 public static final float NaN = 0.0f / 0.0f;

 public static final double POSITIVE_INFINITY = 1.0 / 0.0;
 public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
 public static final double NaN = 0.0d / 0.0;

注意,正负无穷大无法比较相等,所有“非数值”的值都认为是不相同的。
但是可以使用Float/Double.isNaN()判断一个数值是否是非数。

        System.out.println(Float.NEGATIVE_INFINITY==Double.NEGATIVE_INFINITY);//true       System.out.println(Float.POSITIVE_INFINITY==Double.POSITIVE_INFINITY);//true    
       
        System.out.println(Double.NaN==Float.NaN);//false
        System.out.println(Float.NaN==0.0f/0.0f);//false
        System.out.println(Double.NaN==0.0d/0.0d);//false

        System.out.println(Float.isNaN(0.0f/0.0f));//true
        System.out.println(Double.isNaN(0.0d/0.0d));//true
        System.out.println(Float.POSITIVE_INFINITY==1.0f/0.0f);//true
       

任务一个数与进行加减运算结果还是无穷大还是无穷大,乘除看情况如下:

  System.out.println(Float.POSITIVE_INFINITY+1);//Infinity
  System.out.println(Float.POSITIVE_INFINITY-1);//Infinity
  System.out.println(Float.POSITIVE_INFINITY*100);//Infinity
  System.out.println(Float.POSITIVE_INFINITY/1000000);//Infinity
  System.out.println(1/Float.POSITIVE_INFINITY);//0.0
          System.out.println(Float.POSITIVE_INFINITY*Float.POSITIVE_INFINITY);//Infinity
        System.out.println(Float.POSITIVE_INFINITY+Float.NEGATIVE_INFINITY);//NAN
2.2 布尔类型

boolean(布尔)类型有两个值:false和true,在java中,整型值和布尔值之间不能进行相互转换。不像C和C++那样可以通过数值进行转换,下面的代码,在java中直接会报编译错误。

int x=1;
if(x)
{
........
}
2.3 char类型

char是Java中的保留字,与别的语言不同的是,char在Java中是16位的,其他语言大部分是8位的,因为Java用的是Unicode。不过8位的ASCII码包含在Unicode中,是从0~127的。
char类型赋值
char a = ‘a’; //任意单个字符,加单引号。
char a = ‘中’;//任意单个中文字,加单引号。
char a = 111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
注:char只能放单个字符。
char运算
char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。
在Java中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。
示例:

   char m = 'a';
   m = 'a' + 'b';//char类型相加,提升为int类型,输出对应的字符。
   int m1 = 'a' + 'b';//结果是195。//195没有超出int范围,直接输出195。
   char m2 = 197;//输出字符编码表中对应的字符。
   char m3 = '197';//会报错。//因为有单引号,表示是字符,只允许放单个字符。
   char m4 = 'a' + 1;//输出结果是b。//提升为int,计算结果98对应的字符是b。

3 变量 和常量

3.1 变量

变量的命名规则前面已经说过,这里不在累赘

变量一般的定义是 类型名称+变量名
声明一个变量之后,必须用赋值语句对变量进行显式初始化,**千万不要使用未初始化的变量。**为赋值的变量,java会直接报错,不像C语言等会给默认值。如下:
在这里插入图片描述

3.2 变量

在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。习惯上,常量名使用全大写,一旦用final修饰后,赋值之后就不能再进行更改了,如下:

 final  int a;
       final  int b=100;//正确
        a=100;//正确
        a=200;//报错
        b=200;//报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值