Java编程随记

1.float类型在Java中占用4字节,long类型在Java中占用8个字节,为什么float类型的取值范围比long类型的取值范围还大?

 

答案:作为一个常识,我们都知道浮点型在内存中占用的是4个字节的空间,而long型占用的是8个字节的空间。可是为什么4个字节的float型的最大值会大于long型的最大值呢?

  我们都知道,float类型的范围是:一3.403E38~3.403E38。而long类型的范围是:-2^63~2^63-1(大概是9*10^18)。

  我以前也是简单的记住就算完事了,对于它为什么会这样却没有考虑过。

  下面给大家分享一下我现在的理解:

  long整型数,在内存中占用8个字节共64位,它表示的数值有2的64次方,平分正负,数值范围是负2的63次方到正2的63次方-1。

  而float在内存中占4个字节,共32位,但是浮点数在内存中是这样的:

  V=(-1)^s * M * 2^E

   667x190

  浮点数的32位不是简单的直接表示大小,而是按照一定的标准分配的。

  其中第1位,符号位,即S。

  接下来的8位,指数域,即E。

  剩下的23位,小数域,即M,M的取值范围为[1,2)或[0,1)。

  也就是说,浮点数在内存中的二进制值不是直接转换为十进制数值的,而是按照上述公式计算而来,通过这个公式,虽然只用到了4个字节,但是浮点数却比长整型的最大值要大。

  这也就是为什么在数据转换的时候,long类型转换为float类型的根本原因所在!

 

2.使用”+“可以连接两个字符串(String对象),那么,是怎样进行连接的?

 

答案:字符串是Java程序中最常用的一种数据结构之一。在Java中的String类已经重载的"+"。也就是说,字符串可以直接使用"+"进行连接,如下面代码所示:

 

String s = "abc" + "xyz";
 下面让我们先看看如下的代码:

 

 

public class Test
  {
      public static void main(String[] args)
      {
          String s = "abc";
          String ss = "is" + s + "man" + 5;
          System.out.println(ss);
      }
  }
 

 

上面的代码将会输出正确的结果。从表面上看,对字符串和整型使用"+"号并没有什么区别,但事实真的如此吗?下面让我们来看看这段代码的本质。

我们首先使用反编译工具(如jdk带的javap、或jadTest反编译成Java Byte Code,其中的奥秘就一目了然了。在本文将使用jad来反编译,命令如下:


jad -o -a -s d.java TestSimplePlus.class

 

反编译后的主要代码如下:

import java.io.PrintStream;
public class Test
{
    public static void main(String args[])
    {
      String s = "abc";
      String ss = (new StringBuilder("is")).append(s).append("man").append(5).toString();
      System.out.println(ss);
    }
}

 

从上面的代码很容易看出,虽然在源程序中使用了"+",但在编译时仍然将"+"转换成StringBuilder,并且使用了该对象的append()方法来实现字符串的连接。因此,我们可以得出结论,Java中无论使用何种方式进行字符串连接,实际上都使用的是StringBuilder

 

3.正在添加......

你可能感兴趣的:(java,笔记)