JAVA语言基础

1.枚举类型的用法

  1枚举类型是引用类型!

  2枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。

  3可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

  4)可以用 变量名.valueOf("字符串")将字符串转化为枚举类型。

  5)可以用 for(Size value:Size.values()){

System.out.println(value);将枚举值都显示出来。

例如

public class EnumTest {

public static void main(String[] args) {

Size s=Size.SMALL;

Size t=Size.LARGE;

//s和t引用同一个对象?

System.out.println(s==t);  //

//是原始数据类型吗?

System.out.println(s.getClass().isPrimitive());

//从字符串中转换

Size u=Size.valueOf("SMALL");

System.out.println(s==u);  //true

//列出它的所有值

for(Size value:Size.values()){

System.out.println(value);

}

}

}

 enum Size{SMALL,MEDIUM,LARGE};

运行结果

        

2.字串转为数字的基本方法,字符串联接操作

  1int number = Integer.parseInt(numberString );

  2)Integer.parseInt方法将 String 转为数字 ( int)

  3)Integer 属于包 java.lang,它“封装”了一个int类型的整数,因此,它是原始数据类型int的“包装类”。

例如

以下代码的输出结果是什么?

int X=100;

int Y=200;

System.out.println("X+Y="+X+Y);

System.out.println(X+Y+"=X+Y");

为什么会有这样的输出结果?

    

直接显示括号中引号中的字,+”号连接上数字但不显示

3.为什么double类型的数值进行运算得不到“数学上精确”的结果?

   这个涉及到二进制与十进制的转换问题。N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(100次幂)+4×(10-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(20次幂)+0+1×(2-2次幂)=十进制的3.25

double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2n次方)。

  

   举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应21,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)11.10(对应十进制的3.5)之间选择。

   简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

   解决精度损失方法:

使用BigDecimal

 

4.反码,补码,原码的理解:

在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念。

  1、机器数

一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011

那么,这里的 00000011 10000011 就是机器数。

  2、真值

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值13110000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:0000 0001的真值 = +000 0001 = +11000 0001的真值 = 000 0001 = 1

对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.

1) 原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]= 0000 0001

[-1]= 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式.

2) 反码

反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]= [00000001]

[-1] = [10000001]= [11111110]

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

3) 补码

补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]= [00000001]= [00000001]

[-1] = [10000001]= [11111110]= [11111111]

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

5.在运行时读取用户输入

方法一:使用JOptionPane类的showInputDialog方法。

        

             String firstNumber = JOptionPane.showInputDialog(Enter :" );

方法二:使用Scanner

mports java.util.*;

Scanner in=new Scanner(System.in);

System.out.print(What is your name?);

String name=in. nextLine();

Scanner类有nextInt,nextDouble等方法。

6.变量间的类型转换

自动类型转换是安全的:

int      intValue=100;

long   longValue=intValue;

强制类型转换时,可能会引起信息的损失。

double doubleValue=1234567890;

float floatValue=(float)doubleValue;

System.out.println(floatValue);  //1.23456794E9

原文地址:https://www.cnblogs.com/Zhanghaonihao/p/5942574.html