动手动脑

一:运行EnumTest.java事例

           1.引用同一枚举类型名中枚举表中的不同常量,引用的并不是一个对象,

           2.每个具体值都引用一个特定的对象,相同的值则引用同一个对象。

           3.枚举是可以从字符串中转换。

           4.可以使用“==”和equals()方法直接比对枚举变量的值

枚举类型的基本用法:

           枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。

           用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。

           枚举类型的定义格式为:enum   <枚举类型名>   {<枚举表>};    

二:运行TestDouble.java事例

1
2
3
4
5
6
7
8
9
public class TestDouble {
 
    public static void main(String args[]) {
        System.out.println("0.05 + 0.01 = " + (0.05 0.01));
        System.out.println("1.0 - 0.42 = " + (1.0 0.42));
        System.out.println("4.015 * 100 = " + (4.015 100));
        System.out.println("123.3 / 100 = " + (123.3 100));
    }
}

结果:

结论:

这个涉及到二进制与十进制的转换问题。
N进制可以理解为:数值×基数的幂
double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

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

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

如果涉及到精确数字,更适合用字符串而不是double类型,必要时我们要选取string类型的字符串类型来计算更加精确的结果。

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

                  int X=100;

                  int Y=200;

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

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

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

输出结果如下:

X+Y=100200

300=X+Y

 System.out.println("X+Y="+X+Y);//字符型输出,先输出x(100),再输出y(200)

System.out.println(X+Y+"=X+Y");//先进行求和,遇到string类型后按照string类型输出

Java中的加号有时是连接符,有时是运算符:

1.当左右两边连接的都是非数字型时,则为连接符。

2.当一边是数值类型,另一边是非数值类型时,则为连接符。

3.当两边都是数值类型时,则为运算符,即相加求和的作用。

四:阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

      原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。

 如单字节的5的原码为:0000 0101;-5的原码为1000 0101。

反码:正数:正数的反码与原码相同。负数:负数的反码,符号位为“1”,数值部分按位取反。可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算。

  

如单字节的5的反码为:0000 0101;-5的反码为1111 1010。

补码:正数的补码就是其本身。负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值。

   

如单字节的5的补码为:0000 0101;-5的原码为1111 1011。

示例程序:

import java.util.Scanner;

public class ZJF {

       public static void main(String[] args)

       {

              int a=5;

              int b=-5;

               System.out.println(Integer.toBinaryString(a));

               System.out.println(Integer.toBinaryString(b));

       }

}

       正数采用原码,负数采用补码。

五.Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。

       每个变量都有一个有效区域,即定义的那片区域,出了这个区域,变量将不再有效。(全局变量除外)

问题六.查看Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

        java中有8种基本数据类型:byte、int、short、long、boolean、char、float、double
对应的类为:Byte、Int、Short、Long、Boolean、Charecter、Float、Double
逻辑型:boolean
文本型:char
整数型:byte、short、int、long
浮点型:float、double
byte:    1字节 -128~127
short:   2字节 -2^15~2^15-1
int :      4字节 -2^31~2^31-1
long:    8字节 -2^63~2^63-1
boolean:1字节 true false(java中不能以0或非0代替)
float:    4字节 -3.403E38~3.403E38
double:8字节 -1.798E308~- 4.9E324
char:    2字节  ’\u0000‘~' ’\uffff '(16进制的,换算过来即0~65535)
(1字节等于8位)
结论:由基本到复杂。
原文地址:https://www.cnblogs.com/zhangzhongkun/p/9753572.html