1.0.0 Summary

Tittle:【Java】-NO.16.EBook.4.Java.1.002-【疯狂Java讲义第3版 李刚】- 数据类型

Style:EBook

Series:Java

Since:2017-09-01

End:....

Total Hours:...

Degree Of Diffculty:2

Degree Of Mastery:2

Practical Level:2

Desired Goal:2

Archieve Goal:....

Gerneral Evaluation:...

Writer:kingdelee

Related Links:

http://www.cnblogs.com/kingdelee/

1.基本数据类型

double:占8字节,64位

float:占4字节,32位

需要精确保存浮点类型,应该使用BigDecimal

1字节:即8位

浮点型

  1. float af = 5.2345556f;
  2. // 下面将看到af的值已经发生了改变
  3. System.out.println(af);
  4. double a = 0.0;
  5. double c = Double.NEGATIVE_INFINITY;
  6. float d = Float.NEGATIVE_INFINITY;
  7. // 看到float和double的负无穷大是相等的。
  8. System.out.println(c == d);
  9. // 0.0除以0.0将出现非数
  10. System.out.println(a / a);
  11. // 两个非数之间是不相等的
  12. System.out.println(a / a == Float.NaN);
  13. // 所有正无穷大都是相等的
  14. System.out.println(6.0 / 0 == 555.0/0);
  15. // 负数除以0.0得到负无穷大
  16. System.out.println(-8 / a);
  17. // 下面代码将抛出除以0的异常
  18. // System.out.println(0 / 0);

5.2345557
true
NaN
false
true
-Infinity

 

类型转换:

String 字符串类型:

当第一次使用某个字符串字面量时,jvm会使用常量池缓存字符串字面量。之后每次使用都直接使用常量池的字面量。

除法: /

一般除数不能为0. 例外情况:当 有一方是浮点数时,结果也是浮点数,即除数是0 则为正/负 无穷大。

  1. public static void main(String[] args)
  2. {
  3. double a = 5.2;
  4. double b = 3.1;
  5. double div = a / b;
  6. // div的值将是1.6774193548387097
  7. System.out.println(div);
  8. // 输出正无穷大:Infinity
  9. System.out.println("5除以0.0的结果是:" + 5 / 0.0);
  10. // 输出负无穷大:-Infinity
  11. System.out.println("-5除以0.0的结果是:" + - 5 / 0.0);
  12. // 下面代码将出现异常
  13. // java.lang.ArithmeticException: / by zero
  14. System.out.println("-5除以0的结果是::" + -5 / 0);
  15. }

  

取余: %

1.两边都是整数,对0取余会抛异常;除数为0,余数为0

2.有一边为浮点数,对0取余结果为非数NaN;除数不为0时,输出0.0

  1. public static void main(String[] args)
  2. {
  3. double a = 5.2;
  4. double b = 3.1;
  5. double mod = a % b;
  6.  
  7. System.out.println(mod); // mod的值为2.1
  8. System.out.println("5对0.0求余的结果是:" + 5 % 0.0); // 输出非数:NaN
  9. System.out.println("-5.0对0求余的结果是:" + -5.0 % 0); // 输出非数:NaN
  10. System.out.println("0对5.0求余的结果是:" + 0 % 5.0); // 输出0.0
  11. System.out.println("0对0.0求余的结果是:" + 0 % 0.0); // 输出非数:NaN
  12. System.out.println("0对5求余的结果是:" + 0 % 5); // 0
  13. // 下面代码将出现异常:java.lang.ArithmeticException: / by zero
  14. System.out.println("-5对0求余的结果是:" + -5 % 0);
  15. }

  

简单算术:

  1. public static void main(String[] args)
  2. {
  3. double a = 3.2; // 定义变量a为3.2
  4. // 求a的5次方,并将计算结果赋为b。
  5. double b = Math.pow(a , 5);
  6. System.out.println(b); // 输出b的值。
  7. // 求a的平方根,并将结果赋给c
  8. double c = Math.sqrt(a);
  9. System.out.println(c); // 输出c的值。
  10. // 计算随机数,返回一个0~1之间的伪随机数。
  11. double d = Math.random();
  12. System.out.println(d); // 输出随机数d的值
  13. // 求1.57的sin函数值:1.57被当成弧度数
  14. double e = Math.sin(1.57);
  15. System.out.println(e); // 输出接近1
  16. }

赋值运算符  

  1. public static void main(String[] args)
  2. {
  3. // 定义一个byte类型的变量
  4. byte a = 5;
  5. // 下面语句出错,因为5默认是int类型,a + 5就是int类型。
  6. // 把int类型赋给byte类型的变量,所以出错,编译时出错
  7. // a = a + 5;
  8. // 定义一个byte类型的变量
  9. byte b = 5;
  10. // 下面语句不会出现错误
  11. b += 5;
  12. }

  

 

Byte:

Short:

Character:

Integer:

  1. /**
  2. * Cache to support the object identity semantics of autoboxing for values between
  3. * -128 and 127 (inclusive) as required by JLS.
  4. *
  5. * The cache is initialized on first usage. The size of the cache
  6. * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
  7. * During VM initialization, java.lang.Integer.IntegerCache.high property
  8. * may be set and saved in the private system properties in the
  9. * sun.misc.VM class.
  10. */

  

Long:

Float和Double都没有cache

  1. package com.lee.test.java.ebook.crazy_java.u_6_oop_2;
  2.  
  3. /**
  4. * Description:
  5. * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
  6. * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
  7. * <br/>This program is protected by copyright laws.
  8. * <br/>Program Name:
  9. * <br/>Date:
  10. *
  11. * @author Yeeku.H.Lee kongyeeku@163.com
  12. * @version 1.0
  13. */
  14. public class WrapperClassCompare {
  15. public static void main(String[] args) {
  16. Integer a = new Integer(6);
  17. // 输出true
  18. System.out.println("6的包装类实例是否大于5.0" + (a > 5.0));
  19. System.out.println("比较2个包装类的实例是否相等:"
  20. + (new Integer(2) == new Integer(2))); // 输出false
  21. System.out.println(new Integer(2).equals(new Integer(2)));
  22. // 通过自动装箱,允许把基本类型值赋值给包装类的实例
  23. Integer ina = 2;
  24. Integer inb = 2;
  25. System.out.println("两个2自动装箱后是否相等:" + (ina == inb)); // 输出true
  26. Integer biga = 128;
  27. Integer bigb = 128;
  28. System.out.println("两个128自动装箱后是否相等:" + (biga == bigb)); // 输出false
  29. System.out.println("两个128自动装箱后是否equals:" + biga.equals(bigb)); // 输出true
  30.  
  31. Integer a1 = new Integer(1);
  32. Integer a2 = new Integer(1);
  33.  
  34. System.out.println(a1.equals(a2));
  35. System.out.println(a1 == a2);
  36.  
  37. System.out.println("---------String----------");
  38.  
  39. String str1 = "1";
  40. String str2 = "1";
  41. String str3 = new String("2");
  42. String str4 = new String("2");
  43. String str5 = "1" + str1;
  44. String str6 = "11";
  45. String str7 = new String("11");
  46. // 弱
  47. System.out.println("两个字符串字面量内容比较:" + "1".equals("1"));
  48. // 弱
  49. System.out.println("两个字符串字面量对象对象:" + "1" == "1");
  50. System.out.println("两个字符串字面量内容比较:" + str1.equals(str2));
  51. System.out.println("两个字符串字面量对象比较:" + str1 == str2);
  52. System.out.println("两个字符串字面量内容比较:" + str3.equals(str4));
  53. System.out.println("两个字符串字面量对象比较:" + str3 == str4);
  54. System.out.println("拼接的字符串比较1:" + str5.equals(str6));
  55. System.out.println("拼接的字符串比较:" + str5 == str6);
  56. System.out.println("拼接的字符串比较:" + str6 == str7);
  57.  
  58. System.out.println("---------Integer----------");
  59.  
  60. Integer int1 = 1;
  61. Integer int2 = 1;
  62. Integer int3 = new Integer(1);
  63. Integer int4 = new Integer(1);
  64. Integer int5 = 128;
  65. Integer int6 = 128;
  66.  
  67. // 弱
  68. // System.out.println(1 == 1);
  69. System.out.println("两个字符串字面量内容比较:" + int1.equals(int2));
  70. System.out.println("两个字符串字面量对象比较:" + (int1 == int2));
  71. System.out.println("两个字符串字面量内容比较:" + int3.equals(int4));
  72. System.out.println("两个字符串字面量对象比较:" + (int3 == int4));
  73. System.out.println("两个字符串字面量内容比较:" + int5.equals(int6));
  74. System.out.println("两个字符串字面量对象比较:" + (int5 == int6));
  75.  
  76. Byte b3 = new Byte("1");
  77. System.out.println(b3);
  78. Byte b4 = new Byte("11");
  79. System.out.println(b4);
  80. // Byte [-128, 127] 即 2^7,
  81. Byte b5 = new Byte("127");
  82. // System.out.println(1 << 7 - 1);
  83. System.out.println(b5);
  84. // Short [-32768, 32767] 2^15
  85. // System.out.println((1 << 15) - 1);
  86.  
  87. Short s1 = 128;
  88. Short s2 = 128;
  89. Short s3 = 127;
  90. Short s4 = 127;
  91. System.out.println(s1 == s2); // true
  92. System.out.println(s3 == s4); // false
  93.  
  94. Long l1 = 128l;
  95. Long l2 = 128l;
  96. Long l3 = 127l;
  97. Long l4 = 127l;
  98. System.out.println(l1 == l2); // false
  99. System.out.println(l3 == l4); // true
  100.  
  101. System.out.println("-------String---------");
  102.  
  103. }
  104. }

 

  1. public static void main(String[] args) {
  2.  
  3. // 常量池:
  4. // 管理编译时的被确定并保存到.class的数据(常量)。
  5.  
  6. // 1.字符串常量池
  7. // 管理在编译时计算出来的值。如String s1 = "a"
  8. // 2. new String("a"),先使用常量池管理"a",再在堆内存保存构建的"a"对象,即共有两个对象
  9. // 3. .intern()可以值复制到常量池中并返回对应的地址,如果已经存在则返回已存在的地址
  10.  
  11. String s1 = "a";
  12. String s2 = "a";
  13. String s3 = new String("a");
  14. String s4 = new String("a");
  15.  
  16. System.out.println("#1:" + (s1 == s2)); // T 两个都是常量池中的值,其地址一样
  17. System.out.println("#2:" + (s1 == s3)); // F 前者是常量池,后者是堆内存中的,地址肯定不一样
  18. System.out.println("#3:" + (s3 == s4)); // F new 出来的是堆内存中不一样的两个对象,尽管构造函数将其对象的值是一样的,但地址不一样
  19.  
  20. String intern = s3.intern();
  21. String intern1 = s4.intern();
  22. System.out.println("#4:" + (s2 == intern)); // T intern返回了常量池中的相同值的地址
  23. System.out.println("#5:" + (s3 == intern)); // F s3依旧是堆内存的地址,intern是常量池的地址
  24. System.out.println("#6:" + (intern1 == intern)); //T 都是常量池的地址
  25.  
  26. }
  27.  
  28. @Test
  29. public void t1() {
  30.  
  31. // 2.普通变量
  32. // 根据字符串常量的定义,必须是编译时确定下来的。 String t4 = "a" + "b"; 这种有 计算的非final的是无法在编译时就确定的。
  33.  
  34. String t1 = "a";
  35. String t2 = "b";
  36. String t1_t2 = t1 + t2;
  37. String t3 = "ab";
  38. String t4 = "a" + "b";
  39. String t5 = "ab";
  40.  
  41. System.out.println("#1:" + (t3 == t1_t2)); // F
  42. System.out.println("#2:" + (t4 == t1_t2)); // F
  43. System.out.println("#3:" + (t4 == t5)); // T
  44. }
  45.  
  46. @Test
  47. public void t2() {
  48.  
  49. // 2.宏变量
  50. // 使用final修饰的变量可以转化为宏变量,即在编译的时候就能够确下来并保存到常量池中。
  51.  
  52. final String t1 = "a";
  53. final String t2 = "b";
  54. final String t1_t2 = t1 + t2;
  55. final String t3 = "ab";
  56. final String t4 = "a" + "b";
  57.  
  58. System.out.println("#1:" + (t3 == t1_t2)); // T 都能够在编译的过程中确定下来
  59. System.out.println("#2:" + (t4 == t1_t2)); // T 都能够在编译的过程中确定下来
  60. }

  

 

【Java】-NO.16.EBook.4.Java.1.002-【疯狂Java讲义第3版 李刚】- 数据类型的更多相关文章

  1. 【Java】-NO.16.EBook.4.Java.1.011-【疯狂Java讲义第3版 李刚】- AWT

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]-  AWT Style:EBook Series:Java ...

  2. 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- Swing

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]-  Swing Style:EBook Series:Jav ...

  3. 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- JDBC

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.012-[疯狂Java讲义第3版 李刚]-  JDBC Style:EBook Series:Java ...

  4. 【Java】-NO.16.EBook.4.Java.1.005-【疯狂Java讲义第3版 李刚】- 枚举

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.005-[疯狂Java讲义第3版 李刚]- 枚举 Style:EBook Series:Java Si ...

  5. 【Java】-NO.16.EBook.4.Java.1.006-【疯狂Java讲义第3版 李刚】- 垃圾回收

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.006-[疯狂Java讲义第3版 李刚]- 垃圾回收 Style:EBook Series:Java ...

  6. 【Java】-NO.16.EBook.4.Java.1.007-【疯狂Java讲义第3版 李刚】- Java基础类

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.007-[疯狂Java讲义第3版 李刚]-  Java基础类 Style:EBook Series:J ...

  7. 【Java】-NO.16.EBook.4.Java.1.008-【疯狂Java讲义第3版 李刚】- 集合/容器

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.008-[疯狂Java讲义第3版 李刚]- 集合 Style:EBook Series:Java Si ...

  8. 【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.009-[疯狂Java讲义第3版 李刚]- 泛型 Style:EBook Series:Java Si ...

  9. 【Java】-NO.16.EBook.4.Java.1.010-【疯狂Java讲义第3版 李刚】- 异常

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.010-[疯狂Java讲义第3版 李刚]- 异常 Style:EBook Series:Java Si ...

  10. 【Java】-NO.16.EBook.4.Java.1.001-【疯狂Java讲义第3版 李刚】- UML

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.001-[疯狂Java讲义第3版 李刚]- Style:EBook Series:Java Since ...

随机推荐

  1. 微信小游戏 RES版本控制+缓存策略 (resplugin和ResSplitPlugin插件使用)

    参考: RES版本控制 使用 AssetsManager 灵活定制微信小游戏的缓存策略 一.我们的目标 目标就是让玩家快速进入游戏,然后根据游戏的进度加载相应的资源,并可对资源进行版本控制.本地缓存. ...

  2. E - Train Problem I

    As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to ge ...

  3. [Asp.net]缓存简介

    写在前面 针对一些经常访问而很少改变的数据,使用缓存,可以提高性能.缓存是一种用空间换取时间的技术,说的直白点就是,第一次访问从数据库中读取数据,然后将这些数据存在一个地方,比如内存,硬盘中,再次访问 ...

  4. python3安装PIL

    原创    2017-09-29 16:15:27 系统环境: 64位win10系统,同时安装python2.7与python3.6两个版本 安装: PIL是Python平台事实上的图像处理标准库,支 ...

  5. Linux----面试

    1:tcp和udp的区别 TCP:是面向连接的流传输控制协议,具有高可靠性,确保传输数据的正确性,有验证重发机制,因此不会出现丢失或乱序. UDP:是无连接的数据报服务,不对数据报进行检查与修改,无须 ...

  6. Inotify+rsync实现实时数据同步

    使用rsync可以实现数据同步,但是即使使用crontab定时任务最小执行间隔为1分钟,在数据实时性要求比较高场合需使用inotify+rsync实现实时同步 下载inotify wget https ...

  7. linux内核添加模块

    参考: http://blog.csdn.net/gaoguoxin2/article/details/50220665 动态添加模块不需要编译内核. LINUX的模块主要由6部分组成: 1.模块的加 ...

  8. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

  9. [No0000182]Parallel Programming with .NET-Partitioning in PLINQ

    Every PLINQ query that can be parallelized starts with the same step: partitioning.  Some queries ma ...

  10. lame音频编码注意的点

    1.注意每次编码的PCM数据不能太短,如果太短编码函数长期返回-1这样的错误,将导致编码器彻底失效程序奔溃的问题,经测试32000在3200下稳定,大概1/10码率是没有问题的,具体请自行查询或调试 ...