博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础知识总结
阅读量:5092 次
发布时间:2019-06-13

本文共 4494 字,大约阅读时间需要 14 分钟。

/*

java基础语言总结

*/

1.基本数据类型有哪些

byte short boolean char int float long double
//测试基本数据类型所占用的字节数,可以通过其包装类进行实现
System.out.println("byte的大小"+Byte.SIZE/8);
System.out.println("short的大小"+Short.SIZE/8);
System.out.println("char的大小"+Character.SIZE/8);
System.out.println("int的大小"+Integer.SIZE/8);
System.out.println("float的大小"+Float.SIZE/8);
System.out.println("double的大小"+Double.SIZE/8);
System.out.println("long的大小"+Byte.SIZE/8);

输出如下:

byte的大小1
short的大小2
char的大小2
int的大小4
float的大小4
double的大小8
long的大小1

java中支持类型向上转型,低精度的可以直接转化为高精度的,但是高精度的转化为低精度的必须强转

如:float int double 之间的相互转化
float f=3.14f;
int f1=(int)f;
System.out.println(f1);
double d=f;
System.out.println(d);
double d1=3.16478263482364832;
float f2=(float)d1;
System.out.println(f2);
int a=3;
double d2=a;
System.out.println(d2);

//了解逻辑运算中的短路与和与

&& 此为短路与,&为与

&&:当条件的左端已经判断为false的时候,有端不需要进行判断就可以跳出

&必须判断两端的情况,不管是否左边为false

public static void main(String [] args){

int a=2;
int b=5;
long flag=10000000;
long time=System.currentTimeMillis();
while(flag!=0){
if(a==3&b==5){
System.out.println("输出的为正确");
}
flag--;
}
long temptime=System.currentTimeMillis();
System.out.println(temptime-time); // 15
while(flag!=10000000){
if(a==3&&b==5){
System.out.println("输出的为正确");
}
flag++;
}
long endTime=System.currentTimeMillis();
System.out.println(endTime-temptime); // 0
}
1.1String 类 StringBulider StringBuffer
String类:
String s="abc";
String s1="abc";
System.out.println(s1==s); //true
当String对象为字符串常量的时候,java虚拟机将会将此字符串放到字符串常量池中作为缓存,
当定义另外一个字符串常量时,jvm将会在常量池中先查找是否存在这个常量,如果存在将会把地址给
栈中的引用变量,没有将会在常量池中产生一个新的对象,并把地址交给栈中的引用变量。
String s1="abc";
String s2="abcd";
String s3=s1+s2;
String s4="abc"+"abcd";
System.out.println(s3==s4)//false
//返回对象的hashCode
System.identityHashCode(s3);
s3是先取得s1和s2在常量池中的值,再进行拼接。
而s4是在编译时就将字符串进行了拼接,之后在常量池中就创建了这个新的对象
可以通过java反编译看看字节码文件 ,就可以在常量池中存在此常量 javap -v BasicDataType.class 

从上面反编译中,我们可以看出在常量池中已经重新建立了一个abcabcd的对象,下面将通过jvm的操作指令来解释如何将这个对象交给s4的

idc #39 将#39这个地址中的内容从常量池中压入栈中,而这个地址指向的是#40这个地址,所以将常量abcabcd压入栈中

而astore的意思是将栈顶的数弹出保存到本地变量5中,刚好就是S4 因为main函数中有一个参数args

 

String类常用方法

     常用的构造方法:         

     String() --------- 初始化一个String对象,表示一个空字符序列

     String(String value) --------- 利用一个直接量创建一个新串

     String(char[] value) --------- 利用一个字符数组创建

     String(char[] value,int offset,int count) --------- 截取字符数组,从offset开始count个字符创建

     String(StringBuffer buffer) --------- 利用StringBuffer创建

   

 

    常用方法讲解:

      compareTo(String anotherString)

      

String str="xiaolinihao";              String str1="xiaoli";              System.out.println(str.compareTo(str1));  //此时返回5

  

         String str="xiaozhou";

         String str1="xiaoli";
         System.out.println(str.compareTo(str1)); //此时返回14

           笔者当时很不明白,上面两种结果到底是怎么来的,下面我们将从源码的角度解释为什么会出现以下的结果

int len1 = value.length;        int len2 = anotherString.value.length;        int lim = Math.min(len1, len2);        char v1[] = value;        char v2[] = anotherString.value;        int k = 0;        while (k < lim) {            char c1 = v1[k];            char c2 = v2[k];            if (c1 != c2) {                return c1 - c2;            }            k++;        }        return len1 - len2;    }

         从源码中,我们可以看到比较两个字符串的大小是取其相同的长度进行比较,相同长度的部分如果出现不同的值,那么将会返回对应位置的ascll码的差值,如果比较都相同则返回其字符串长度的差值。

 indexof(String str,int fromIndex)

public int indexOf(String str, int fromIndex) {        return indexOf(value, 0, value.length,                str.value, 0, str.value.length, fromIndex);    }

static int indexOf(char[] source, int sourceOffset, int sourceCount,char[] target, int targetOffset, int targetCount,int fromIndex)

{
    if (fromIndex >= sourceCount) {
    return (targetCount == 0 ? sourceCount : -1);
    }
    if (fromIndex < 0) {
    fromIndex = 0;
    }
   if (targetCount == 0) {
   return fromIndex;
   }

   char first = target[targetOffset];

   int max = sourceOffset + (sourceCount - targetCount);      

   //如果目标字符串为 xiao   源字符串是hellozhouxia  它们之间长度的差值为8                                                      

   //当源字符串判断到第9个字符u时,还是与x不想同,那么久不需要再判断了,因为目标字符串为4位,而

   //源字符串只剩下三位,是不可能和目标字符串相同的

   for (int i = sourceOffset + fromIndex; i <= max; i++) {

    //当第一次只有一个字符相同,但是后面有字符不一致的时候,这个循环就起作用了
   /* Look for first character. */
   if (source[i] != first) {                                   //将会从第i个位置继续匹配第一个是否相同,如果相同继续进行匹配第二个字符
   while (++i <= max && source[i] != first);        //当目标字符串的第一个字符与原字符串相同时跳出while循环
   }

 

   /* Found first character, now look at the rest of v2 */    //匹配下一个字符是否相同

   if (i <= max) {
   int j = i + 1;
   int end = j + targetCount - 1;         
   for (int k = targetOffset + 1; j < end && source[j]
   == target[k]; j++, k++);

   if (j == end) {

   /* Found whole string. */
   return i - sourceOffset;                                //此时匹配到了整个字符串,输出的是源字符串中相同字符串中的第一个字符的位置

    }

 }

}

return -1;       //匹配不成功的时候将会返回-1
}

 

 

转载于:https://www.cnblogs.com/xiaozhouboke/p/5940441.html

你可能感兴趣的文章
jQuery.form.js使用
查看>>
(转)linux sort,uniq,cut,wc命令详解
查看>>
关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
查看>>
UVa540 Team Queue(队列queue)
查看>>
mysql数据增删改查
查看>>
akka之种子节点
查看>>
不知道做什么时
查看>>
matlab 给某一列乘上一个系数
查看>>
密码学笔记——培根密码
查看>>
Screening technology proved cost effective deal
查看>>
MAC 上升级python为最新版本
查看>>
创业老板不能犯的十种错误
查看>>
Animations介绍及实例
查看>>
判断请求是否为ajax请求
查看>>
【POJ2699】The Maximum Number of Strong Kings(网络流)
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>