char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定
的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字
节(16 比特),所以放一个中文是没问题的。
char类型能否存储一个中文字符?为什么?
可以。一个char是两个字节,而一个中文也是两个字节。
字符串存储的机制是什么?
字符串会存储在常量池中。在给字符串赋值的时候,JVM 会检查常量池中是否已经存在该
字符 串,如果存在则直接引用该地址,否则会在常量池中创建该字符串然后引用该地址
1./*
2.*描述此段代码的功能:( 计算自由落体运动中物体的位置 )
3.*/
4.// 此语句意义何在?( 导入java.util包下的Scanner类 )
5.import java.util.Scanner;
6.public class FreeFall {
7. public static void main(String[] args) {
8.// 此语句意义何在?( 创建接收控制台输入的类Scanner )
9. Scanner scanner = new Scanner(System.in);
10. double g = 9.80;
11. System.out.println("请输入自由下落的时间(秒):");
12. // 此语句意义何在?( 使用double类型接收控制台输入的时间数据t )
13. double t = scanner.nextDouble();
14. // 此语句意义何在?( 根据自由落体的位移公式计算出位移值s )
15. double s = 0.5 * g * t * t;
16. // 此语句意义何在?( 取保保留一位小数 )
17. s = Math.round(10 * s) / 10.0;
18. System.out.println(t + "秒后,物体自由下落了" + s + "米");
19. }
20.}
八种基本数据类型的大小,以及他们的封装类
1.int是基本数据类型,Integer是int的封装类,是引用类型。int默认值是0,而Integer默认值是
null,所以Integer能区分出0和null的情况。一旦java看到null,就知道这个引用还没有指向某个对象,
再任何引用使用前,必须为其指定一个对象,否则会报错。
2.基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须
通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另一个数组
时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。
虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何
供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机
中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素
占8位。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。使用int的原
因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而
是指CPU硬件层面),具有高效存取的特点。
Java自动装箱与拆箱
装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的
valueOf(int) 方法
拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int)。调用方法:Integer的intValue方 法
在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:
Integer i = new Integer(10);
而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这
样就可以了:
Integer i = 10;
public class Demo {
public static void main(String[] args) {
Integer i1=100;
Integer i2=100;
Integer i3=200;
Integer i4=200;
System.out.println(i1 == i2); //true
System.out.println(i3 == i4); //false
}
}
在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返
回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。
上面的代码中i1和i2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是同一
个对象,而i3和i4则是分别指向不同的对象。
public class Main {
public static void main(String[] args) {
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(i1==i2); //false
System.out.println(i3==i4); //false
} }
原因: 在某个范围内的整型数值的个数是有限的,而浮点数却不是。
包装类
Integer
new Integer(5);新建对象
Integer.valueOf(5);
parseInt();字符串转换成int
toBinaryString();把整数转换成2进制数据
toOctalString();把整数转换成8进制数据
toHexString();把整数转换成16进制数据
Double
new Double(3.14)
Double.valueOf(3.14)//和 new 没有区别
Double.parseDouble();
Integer a = new Integer(5);//创建对象
Integer b = Integer.valueOf(5);//读取缓存
Integer c = Integer.valueOf(5);//读取缓存
System.out.println(b==c);//true
System.out.println(a==b);//false
System.out.println(a.equals(b));//true
自动装箱:把基本类型包装成一包装类的对象
Integer a = 5;//a是引用类型,引用了包装对象的地址。
编译器会完成对象的自动装箱:Integer a = Integer.valueOf(5);
自动拆箱:从包装对象中,自动取出基本类型值
int i = a;//a现在是包装类型,没法给变量赋值,需要把5取出来。
编译器会完成自动拆箱:int i = a.intValue();
基本类型(八种)
byte 1字节 -2幂7 ^2幂7-1 或者 -128到127
short 2字节 -2幂15 ^2幂15 -1 Short.MIN_VALUE; Short.MAX_VALUE;
int 4字节 -2幂31 ^2幂31 -1
long 8字节 -2幂63 ^2幂63 -1
float 4字节 单精度,对小数部分的精度要求不高
double 8字节 双精度,精确的小数部分并操作值很大时
char 2字节 0到65535
boolean 1字节 真true 假false
变量
变量名必须是一个有效的标识符。
变量名不可以使用java关键字
变量名不能重复
标识符
A 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符。
B. 不能以数字开头。
D. 标识符的命名最好能反映出其作用,做到见名知意。
C. 标识符是严格区分大小写的。
关键字
一共有53个关键字。其中有两个保留字:const和goto。关键字不能被用作标识符!!
引用类型
引用类型是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组
进制前缀
0x - 16进制
0 -8进制
\u -char类型,16进制
浮点数运算不精确
用BigDecimal类
add()
public static double add(double d1, double d2) {
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.add(b2).doubleValue();
}
subtract()
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.subtract(b2).doubleValue();
方法的重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数列表(也就是说参数的个数和类型不同)。
创建数组
动态初始化:int[] a = new int[5];
静态初始化1:int[] a ={1,2,3,4,5,6,7,8};
静态初始化2:int[] a =new int[]{1,2,3,4,5};