《java核心技术一》笔记(一)数据类型

《java核心技术一 第10版》

链接:https://pan.baidu.com/s/15ECUqcjwDJq_537HPfhX9w 密码:w8oa

基础知识

注释
数据类型
变量
运算符
字符串
输入输出
控制流
大数值
数组

1.注释

需要长篇注释,使用// 或者 /** xxx */

2.数据类型

java是强类型语言,一共8个种基本类型
整型:int short long byte
浮点型: float double
字符类型: char
布尔型: boolean

2.1 整型

注意每个类型的取值范围,防止溢出!!!

int a = 214783645;
double price = a*20  绝对溢出!!!

long +后缀l  40000l
类型 存储需求 取值范围
int 4字节 -214783648~214783648
short 2字节 -32768~32767
long 8字节 -9223372036864775808~9223372036864775807
byte 1字节 -128~127

2.2 浮点类型

类型 存储需求 取值范围
float 4字节 大约 ± 3.402 823 47E+38F (有效位数为 6 ~ 7 位)
double 8字节 大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位)

计算误区:

  float a=2.0f;
  float b=1.9f;

  float c=2.0f;
  float d=1.1f;

  double a1=2.0;
  double b1=1.9;

  double c1=2.0;
  double d1=1.1;

  System.out.println("float:"+(a-b));
  System.out.println("double:"+(a1-b1));

  System.out.println("float:"+(c-d));
  System.out.println("double:"+(c1-d1));

  System.out.println(2.0-1.9);
  System.out.println(2.0-1.1);

一般我们都会认为这个结果很简单就是:0.1, 0.9
然而实际跑出来的结果是:

float:0.100000024
double:0.10000000000000009
float:0.9
double:0.8999999999999999
0.10000000000000009
0.8999999999999999



这种舍入误差的主要 原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。 这
就好像十进制无法精确地表示分数 1/3 —样。 如果在数值计算中不允许有任何舍入误差,就应该使用 BigDecimal类 

2.3 char类型

char 类型原本用于表示单个字符,
目前一些unicode字符需要两个chat值

‘A’ ---> 编码为65对应的字符常量
“A” ---> 含有一个字符A的字符串

十六进制表示范围:
\u0000 ---  \uffff

警告:

Unicode 转义序列会在解析代码之前得到处理
1."\u0022+\u0022”  并不是包含+的字符串 而是 “”+“” 空串
2.// \u000a is a newline    会抛语法错误  因为 \u000a 是换行符
3.// Look inside c:\users 产生一个语法错误, 因为 \u 后面并未跟着 4 个十六进制数

2.4 boolean类型

true false
整型值和布尔值不能互换

2.5 数值之间的转换:

int --> float 精度会丢失
long -- > float 精度会丢失
long -->  double 精度会丢失

int a = 123456789;
float b =a;
System.out.println(b);
1.23456792E8
        
两数相加,先转成同一类型,以最大的类型靠拢。

警告:

 如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的 表示范围, 结果就会截断成一个完全不同的值。例如,(byte) 300 的实际值为 44。
 
  int a =214718140;
  double b = 240*a;
  System.out.println(b);
  
  int a1 =214718140;
  double b1 = a1;
  double b2 = 240*b1;
  System.out.println(b2);

  -7253952.0
  5.15323536E10

2.6 字符串

substring 提取子字符串 ,substring(a,b) 从a下标开始,b是不想截取的下标
获取的字符串长度:b-a

String str = "Hello";
String s = str.substring(0,3);

s="Hel"

2.6.1 检测字符串是否相等

1. " Hello".equals (greeting);
2.不区分大小写 "Hello".equalsIgnoreCase("hel1o");


2.6.2 String Api

if (str != null && str.lengthO != 0)

• int compareTo(String other)
   按照字典顺序, 如果字符串位于 other 之前, 返回一个负数; 如果字符串位于 other 之
   后, 返回一个正数; 如果两个字符串相等, 返回 0。
   
• new String(int[] codePoints, int offset, int count) 
   用数组中从 offset 开始的 count 个码点构造一个字符串。
   
• boolean equals(0bject other)

• boolean equalsIgnoreCase(String other) 如果字符串与 other 相等 (忽略大小写,) 返回 tme。

• boolean startsWith(String prefix) 
• boolean endsWith(String suffix)
   如果字符串以 suffix 开头或结尾, 则返回 true。
   
• int indexOf(String str)
• int indexOf(String str, int fromlndex) 
• int indexOf(int cp)
• int indexOf(int cp, int fromlndex)
   返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或 fromlndex 开始计算。 如果在原始串中不存在 st,r 返回 - 1。
   
• int 1astIndexOf(String str)
• int 1astIndexOf(String str, int fromlndex) 
• int lastindexOf(int cp)
• int 1astindexOf(int cp, int fromlndex)
   返回与字符串 str 或代码点 cp 匹配的最后一个子串的开始位置。 这个位置从原始串尾
   端或 fromlndex 开始计算。 

• int 1ength( )
   返回字符串的长度。
   
• String substring(int beginlndex)
• String substring(int beginlndex, int endlndex)
   返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾或 endlndex-l 的所有代码单元。
   
• String toLowerCase( )
• String toUpperCase( )
这个字符串将原始字符串中的大写字母改为小写, 或者将原始字 符串中的所有小写字母改成了大写字母。

•String trim( )
   返回一个新字符串。 这个字符串将删除了原始字符串头部和尾部的空格。

2.6.3 构建字符串

字符构建器:StringBuilder
    StringBuilder builder = new StringBuilder();
    builder.append("aaa");
    builder.append("bbb");
    String comleteString = builder.toString();
    "aaabbb"
    
    
• StringBuilder()
    构造一个空的字符串构建器。
• int length()
    返回构建器或缓冲器中的代码单元数量。
• StringBui1der append(String str)
    追加一个字符串并返回 this
• StringBui 1der append(char c)
    追加一个代码单元并返回 this。
• void setCharAt(int i,char c)
    将第 i 个代码单元设置为 c。
• StringBui1der insert(int offset,String str)
    在 offset 位置插入一个字符串并返回 this。
• StringBuilder insert(int offset,Char c)
    在 offset 位置插入一个代码单元并返回 thi。s
• StringBui1der delete(1nt startindex,int endlndex)
    删除偏移量从 startindex 到 endlndex-1 的代码单元并返回 this。
• String toString()
    返回一个与构建器或缓冲器内容相同的字符串

2.7 输入输出

2.7.1 读取输入

Scanner in = new Scanner(System.in);

nextLine() : 输入行,可能含有空格
next():      以空格符隔开
nextInt():   读取整数
nextDouble(): 读取浮点数

2.7.2 格式化输出

System.out.printf("%,.2f", 10000.0 / 3.0);
3,333.33

猜你喜欢

转载自blog.csdn.net/sinat_24230393/article/details/83689779