java core是什么_Java Core 那些你必须知道的内容

类型转换原则:占用内存小的类型向占用内存大的类型进行转换,这样能保证不丢失精度。(扩容)

只要是整数就是int型。赋值运算会进行自动强转,纯算数运算也会自动强转,但算数运算且含有变量时不会自动强转。

Bytea = 4;实际上JVM首先会检查4这个int型的数字是否超过byte的长度,若没超过则自动进行强制转化,若超过了就报错。

如下这样,便是上面所说,含有变量的自动强转不会成功。

byte a = 4,b = 5;

Byte c = a + b; //此时会报错,因为在JVM解析时a,b是int型。但是以变量形式强转转byte型不会成功。这种变量式除非带上 (byte)!

类型强转:内存占用多的字段向占用小的转化

自动转型: 所占内存小的类型赋值给所占内存大的类型

byte数值范围是-127 - 128即1个字节8位所表示的最大范围。所以在程序中int b = 129; byte c = (byte) b;这样在进行强转的时候是会出现精确度丢失的问题的。因为强转操作的原因,使得超出了byte范围的变量b,129丢失精确度。

ASCLL表值0-48,A-65,a-97

“Hello”instanceof String 判断Hello对象是否是String类类型的

a>0||a<10左边一旦为true,右边不计算了,结果就是true。所以如果判断语句中使用的话,就需要把一些耗时操作放到||右面,来尽可能节省时间。

||优点:||比|效率高了一点点

局部代码块中的局部变量生命周期:在局部代码块中被创建,到"}"时结束。

函数中的其他局部变量只有当函数执行完后,函数从方法区中消失,紧接着函数中所有的局部变量从栈内存中消失。

\n:回车,\t:制表符,\b:退格, \r:按下回车键,

Windows中回车符: \r\n,Linux中回车符: \n

,\”:在字符串中使用双引号

break 跳出,只跳出循环语句。

continue 跳过,跳过当前次循环。只跳过循环

数组:int[] a = new int[3] -- 类型 对象 = 声明对象[指定大小]

数组也是对象,存放在堆内存中

堆内存:存储数组和对象和成员变量。成员变量即declare在类中的变量。而不是声明在函数或循环体判断体中的局部变量。

栈内存: 存储局部变量,变量所属的作用域运行结束,该变量就自动释放空间。for、while、do-while、函数、局部代码块中的变量都是局部变量

int[] arr = new int[3] 代码在扫描到这一行的时候。JVM会首先在栈内存中declare一个int[] a的引用变量。接着执行new int[3],在堆内存中开辟一块儿连续的内存空间。存储在堆内存中的对象都有首地址,=即把堆内存中new int[3]对象的首地址赋予了a变量。从而建立起了从引用变量->对象堆内存首地址的关系。

arr = null;即把栈内存中的引用变量arr指向堆内存对象的地址指针去掉,使他们断开联系。此时堆内存中的new int[]3由于没有引用变量指向它,就可视为garbage,等待JVM的回收。

第一种定义方式:int[] arr = new int[3]

第二种定义方式:int[] a = new int[]{89,20,300}

第三种定义方式:int[] a = {89,20,300}

选择第一种定义方式:需要一个容器,知道容器的大小,但不明确容器中的数据。选择第二、三种定义方式:需要一个容器,而且数据已知。

int[][] a = new int[3][2] 首先JVM的程序计数器扫到这行代码的时候。加载执行,JVM首先在栈内存中declare一个变量a初始化地址为null,所以a即为引用变量。然后此时JVM运行new int[3][2],会现在堆内存中和new int[3]一样开辟3块连续的内存空间,不同的是new int[3]开辟的是一块而new int[3][2]开辟的是3块连续的空间。然后在每一块内存空间中会写入容量为[2]的小数组的内存地址。此时再开辟开辟三个容量为2的一维数组。将首地址赋予3个大数组的内存空间中。然后将大数组的起始地址赋予栈内存中的引用变量a。需要注意的是:外层数组的内存地址并不是像内数组一样连续的。

第一种定义方式:int[][] arr = new int[3][2]

第二种定义方式:先给大数组初始化,在分别给小数组初始化。

int[][] arr =new arr[3][];//只给大数组分配3个连续空间

arr[0] = newint[2];

arr[1] = newint[1];

arr[2] = newint[3];

第三种定义方式:二维数组中每个小数组长度可以不一样。int[][] arr = {{1,2,3},{2,3},{1}}

二维数组的输出:

int[][]arr = new int[3][];

System.out.println(arr);//输出:[[@c1f3fe

System.out.println(arr[0]);//输出:null 由于内数组中内存空间中存储的是外数组空间地址的首地址的hash值,但此时外数组还没有分配内存空间。所以空间地址为null

System.out.println(arr[0][0]);//发生空指针异常!,因为外数组内存空间还没有分配,直接获取肯定为Exception。

高效计算2*8:2 * 8尽量转化成2 << 3,这样效率高。速度快,因为在计算机中说白了所有的运算最后都会转化成移位和加法运算。所以这种方式效率高,不进行相乘相加操作,只要向左移位即可。

除法转成乘法,乘法转成加法,减法也转成加法

将两个值互换,不借助第三个变量:

第一种方法:

int a = 3,b = 4;

a = a + b;

b = a - b;

a = a - b;

第二种方法:

int a = 3, b = 4;

a = a ^ b; // 3 ^ 4

b = a ^ b; // 3 ^ 4 ^ 4

a = a ^ b; // 3 ^ 4 ^ 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值