java实现版本号的比较

  之前比较客户端版本号,一直用的是String.compareTo,知道出现bug之后才明白了它的不完善地方。它的比较方式是按照字符串的比较来执行的,所以它有不正确的地方。举个例子,之前客户端版本号为:9.9.9,而服务器端最新的客户端版本号为:10.0.1,虽然10.0.1明显高于9.9.9,但是按照compareTo方法,这个9.9.9是大于10.0.1的,导致客户端版本号比较错误。下面是分隔后的版本号转化为Integer值来比较,不过,还是首先比较的个数

 1 public static int compareVersion(String version1, String version2) {
 2     if (version1.equals(version2)) {
 3         return 0;
 4     }
 5     String[] version1Array = version1.split("//.");
 6     String[] version2Array = version2.split("//.");
 7     int index = 0;
 8     //获取最小长度值
 9     int minLen = Math.min(version1Array.length, version2Array.length);
10     int diff = 0;
11     //循环判断每位的大小
12     while (index < minLen && (diff = Integer.parseInt(version1Array[index]) - Integer.parseInt(version2Array[index])) == 0) {
13         index++;
14     }
15     if (diff == 0) {
16         //如果位数不一致,比较多余位数
17         for (int i = index; i < version1Array.length; i++) {
18             if (Integer.parseInt(version1Array[i]) > 0) {
19                 return 1;
20             }
21         }
22
23         for (int i = index; i < version2Array.length; i++) {
24             if (Integer.parseInt(version2Array[i]) > 0) {
25                 return -1;
26             }
27         }
28         return 0;
29     } else {
30         return diff > 0 ? 1 : -1;
31     }
32 }
时间: 2024-10-03 22:55:57

java实现版本号的比较的相关文章

java中版本号的设置

eclipse有时候会报编译器版本与jre版本不匹配,这是后主要涉及两个方面,1,在项目上单击右键,然后选中properties这个选项,之后再打开的窗口查找java compiler选项,设置自己要同意的版本2,依旧是在项目上单击右键,然后选中properties这个选项,之后再打开的窗口查找project facets这个选项卡,打开的窗口里面后列出各个文件的版本号 eclipse中有关设置web.xml的版本号时,有时候通过上面的步骤2是无法成功的这事你需要手动去本地打开项目的目录找到.s

Java - Class版本号和UnsupportedClassVersionError

问题分析 Java是向下兼容的,每一个jdk版本都有对应的class版本号(major + minor version numbers):如果用低版本的jvm去加载高版本jdk编译的类,就会报错:java.lang.UnsupportedClassVersionError 源码中关于这个UnsupportedClassVersionError的注释如下: /** * Thrown when the Java Virtual Machine attempts to read a class * f

触摸java常量池

转:http://www.cnblogs.com/dreamroute/p/5946272.html java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下. 理论 小菜先拙劣的表达一下jvm虚拟内存分布:      程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂.      本地方法栈是jvm调用操作系统方法所使用的栈.      虚拟机栈是jvm执行java代码所使用的栈.      方法区存放了一些常量.静

Java环境变量设置

此电脑->属性->高级系统设置->高级->环境变量 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk_版本号_变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

MAC JAVA 环境变量那些事

1,查看 JAVA 的版本号 akdeMacBook-Pro:bin AK$ java -version java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode) 2,切换不同 JAVA 版本号 1)cd /usr/bin/

java class文件

在正式开始之前,先说下虚拟机提供的语言无关性 Java虚拟机只会解析字节码文件,至于上面到底采用的什么高级语言,他不会去关心.下面我们来看看class字节码文件的结构. Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在class文件之中,中间没有任何分隔符.当遇到占用8位字节以上空间的数据项时,会按照高位在前的方式分割成若干个8位字节进行存储.那么class文件的存储结构如何?你怎么区分一个数据项占用了几个字节呢?class文件采用一种类似于c语言结构体的

随机数是骗人的,.Net、Java、C为我作证

差点儿全部编程语言中都提供了"生成一个随机数"的方法,也就是调用这种方法会生成一个数,我们事先也不知道它生成什么数.比方在.Net中编写以下的代码: Random rand = newRandom(); Console.WriteLine(rand.Next()); 执行后结果例如以下: Next()方法用来返回一个随机数.相同的代码你执行和我的结果非常可能不一样,并且我多次执行的结果也非常可能不一样,这就是随机数. 一.陷阱 看似非常easy的东西,使用的时候有陷阱.我编写以下的代码

centOS 6下安装java、tomcat

centOS 6 下安装java centOS  默认有java的运行环境(gcj),安装sun的jdk前先卸载 gcj. 卸载gcj: #java -version            <-查看当前gcj java的版本号(我这里得到的是 1.4.2) #yum -y remove java-1.4.2-gcj-compat   <- 卸载gcj (y参数表示 在y/n 提问时均回答 y) #chmod a+x jdk-6u14-linux-i586-rmp.bin    <- a+

java类文件结构(字节码文件)

[0]README 0.1)本文部分文字描述转自 "深入理解jvm",旨在学习类文件结构  的基础知识: 0.2)本文荔枝以及荔枝的分析均为原创: 0.3)下面的截图中有附注t*编号,不关乎博文内容: [1]类文件概述 1)各种不同平台的虚拟机与所有平台都统一使用存储格式--字节码,他是构成平台无关性的基石: 2)时至今日,商业机构和开源机构已经在 java语言外发展出一大批在 jvm 上运行的语言,如 Groovy, JRuby, Jython,Scala等: 3)实现语言无关性的基