java中不同数据类型的内存分配方式

首先,在java中一共有两种数据类型,基本类型(primitive types)和引用类型(reference types)。

基本类型
java中的基本类型一共有八种,即byte, int, short, long, float, double, boolean, char。这些类型所申明的变量都是字面值,比如int a = 1,也就是说变量a指向的是1这个值,并没有对象和引用。值得注意的是,为了提高存储的速度,基本类型的变量内存都是存储在栈中的,而栈中的数据是是可以共享的。因此当我们同时声明两个同样字面值的变量时,编译器只会分配同一块内存。这个过程就是先在栈中查找是否存在这样的字面值,如果有则指向那块内存,如果没有就新分配一块内存。因此如果两个变量同时指向一个值,比如:int a = 1;int b = 2;当a的值被改变的时候,b的值并不会被改变,正如前面所说,a的值被改变时会重新去分配一块内存。
引用类型
主要包括一些对基本类型进行封装的类(又称为包装类),比如String,Integer,Double等,还有一些自定义的类。自定义类一般是显式的使用new关键字来告[......]

继续阅读

linux命令行usage格式解释

经常要在Linux下面敲指令,但指令太多很多是忘了记,记了又忘。其实这些指令不用一个一个去记,每一个命令都会有帮助和提示。之前我一看到这些提示就头大,什么方括号,尖括号,省略号,杠之类的,今天静下心来专门学习这个东西,了解完之后发现还是比较简单的,这样遇到新的命令自己学习一下就知道如何使用了,不用再去一个一个查询和记忆了。

帮助的格式一般分以下几种:

方括号[]:表示可选参数,也就是说可以忽略,使用时没有方括号。

尖括号<>:表示必选参数,不能忽略,且尖括号里的输入只能是指定的option,使用时没有尖括号。

省略号...:表示重复多次的参数。

接下来我们以jstat为例,学习如何通过以上几个格式的含义一步步来学习使用一个新的指令。jstat是JDK下面一个用于监控JVM内存使用情况的轻量级工具,我们在命令行下面输入jstat时会输出以下信息,我们一行一行看。

[astd@VM_139_5_tlinux ~]$ jstat
invalid argument count【1】
Usage: jstat -help|-options【2】[......]

继续阅读

Java位操作符的一种简单应用

几乎每种语言都会有位操作符,左移右移、“与”“非”、“或”、“异或”等,这些操作符的意义大家肯定都知道,但是你可曾想过这些位操作符有什么实际的使用价值吗?今天来说下位操作符的一种简单应用。

在游戏开发工作中最常遇到的是对玩家状态的记录,比如奖励是否已经领取过,页面是否是否打开过等等。如果有连续的状态需要记录则他的形式大致是这样的:0100011,0表示没有,1表示有。最常见的做法是DB里使用一个varchar字段用来存储这样的状态:0100011。每次变更的时候找到那一位的状态,然后改下就好了,很直观。但其实我们也可以使用int类型来存储这种连续的状态,一个整数怎么能表示那么多的状态呢?答案是把十进制整数转换为二进制,然后通过位操作符去变更每一位二进制的状态。

问题:给定一个整数a,我们要改变她所表示的二进制的第n位的值为1。

首先构造一个特殊的二进制数,这个数第n位为1,其余都是0。代码表示就是:

int base= (int)Math.pow(2, n-1);

那如果我要改变第n位的值为1,只要将a|base即可。因为base的第n位是1,而其他位都是0,所以“或”之后第n位只能是1,而其他[......]

继续阅读