Date String 类型的互相转换 和 valueOf 、parseInt() 方法的比较

本文介绍Java中日期时间的各种操作方法,包括日期与字符串之间的转换、计算日期差、使用SimpleDateFormat格式化日期等实用技巧。
package method.usually;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


import org.json.JSONObject;


public class typeMethod {


public static void main(String[] args) {

//比较两个方法
// compareValueOfAndParse();
//    
//    // valueOf()方法的使用
//    useValueIOf();
//
// //toString()方法的调用
// methodToString();

// System.out.println(System.currentTimeMillis());  //结果:1462416312377
// System.out.println(new Date(System.currentTimeMillis()));  //结果:Thu May 05 10:45:12 CST 2016

// Date 类型 转换成String 类型 获得短的时间
// dateStortChange(new Date(System.currentTimeMillis()));  // 结果:2016-05-05
//    //Date 类型转换成  String 类型 获取长的时间
// dateLongChange(new Date(System.currentTimeMillis()));   // 结果 :2016-05-05 45:10:12
//
// //将tring 类型转换成 Date 类型
// StringToDate("2016-05-05");

// getYearMonthDayHMS("2015-03-03");

//两个日期相差的天数
// getDiffDay("2015-02-03","2015-02-04");

System.out.println(new Date());
}


/**
* toString()方法的使用
*/
public static void methodToString(){
 Integer integer = new Integer(123);
 String  temp = integer .toString();
 System.out.println(temp);
 System.out.println(temp.getClass().getName());
}

/**
* valueOf()方法 德大结果验证
*/
public static void useValueIOf(){
   String  str = "123";
   Integer integer = Integer.valueOf(str);
   System.out.println("类型为:"+integer.getClass().getName()+"的   "+integer); 
   int strInt = integer.intValue();  //intValue() 可以将Integer 类型转换成 int
   System.out.println(strInt);  //这个是 int 类型的123
}

/**
* parseInt/parseFloat() 方法和valueOf() 方法的区别 
* 前者是可以转换成简单的类型 如:int float 
* 后者是能装换成Integer 或者是 Float 这样的封装类型 即复杂类型
*/
public static void compareValueOfAndParse(){
Float f = new Float("9.5");
String str = "123";
System.out.println(Integer.valueOf(str).getClass().getName());
System.out.println(Integer.parseInt(str));
System.out.println(Float.valueOf(str).getClass().getName());
System.out.println(Float.parseFloat(str));
System.out.println("Value1 = "+ Float.parseFloat(str));
System.out.println("Value = " +  f.valueOf(str));
}

/**
* 将Date(Thu May 05 10:43:06 CST 2016) 类型的时间 转换成一个 String(2016-05-05) 
* @param date
* @return
*/
public static String dateStortChange(Date date){
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sd.format(date);
System.out.println(dateStr);
return dateStr;
}


/**
* 将Date(Thu May 05 10:43:06 CST 2016) 类型的时间 转换成一个 String(2016-05-05 45:10:12) 
* @param date
* @return
*/
public static String dateLongChange(Date date){
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sd.format(date);
System.out.println(dateStr);
return dateStr;
}

/**
* 将 String 转换成  Date
* @param str
* @return
*/
public static Date StringToDate(String str){
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
Date date=null ;
try {
date = sd.parse(str);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}

public static JSONObject getYearMonthDayHMS(String str){
JSONObject obj = null;
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH)+1);
System.out.println(c.get(Calendar.DATE));
return obj;
}

/**计算 两个日期相差多少天
* @param str1
* @param str2
* @return
*/
public static long getDiffDay(String str1, String str2) {
long diff = 0;
try {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sd.parse(str1);
Date date2 = sd.parse(str2);
diff = date2.getTime()-date1.getTime();
if(diff > 0 ){
int day = (int) (diff / 3600 / 24 / 1000);
System.out.println("相差 :"+day);
}else{
int day = (int) (diff / 3600 / 24 / 1000);
System.out.println("相差 :"+day);
}


} catch (Exception ex) {
ex.printStackTrace();


}
return diff;
}

}
<think>首先,用户的问题是:“我想在Java中比较字符串类型的'0'整数类型0的差异请问JavaString0 vsint0 comparison”。这翻译成英文是:“Iwant tocompare thedifference betweenastring '0'and aninteger0 inJava.Please explainJava String0 vsint0 comparison.” 用户正在询问在Java中比较字符串“0”整数0的区别。重点是理解如何比较它们以及涉及的差异。现在,回顾系统级指令:-所有行内数学表达式必须使用$...$格式。-独立公式必须使用$$...$$格式。 -LaTeX语法正确。-使用中文回答。-生成相关问题。 -回答中引用的段落末尾自然地添加引用标识。-回答结构清晰,帮助用户逐步解决问题。 -参考站内引用:引用[1]到[5]。站内引用:-引用[1]:关于字符串比较,使用equalsIgnoreCasecompareTo。 -引用[2]:错误,比较java.util.Datejava.lang.String时无效。-引用[3]:一个将字符串转换为整数的函数,处理各种情况。-引用[4]:比较int字符串的性能,解释了转换比较的开销。 -引用[5]:在MyBatis中比较Date字符串的问题。 这些引用与用户的问题相关,因为用户询问比较字符串整数,类似于引用[4]中提到的性能问题。用户的问题是关于比较字符串“0”整数0。在Java中,字符串整数是不同类型,不能直接比较。需要将它们转换为相同类型。关键点:1.**类型差异**:字符串是对象(java.lang.String),整数是基本类型(int)或对象(java.lang.Integer)。 2. **比较方式**:-直接比较(如 ==或equals)会失败,因为类型不匹配。-需要转换:要么将字符串转换为整数,要么将整数转换为字符串。 3. **性能方面**:如引用[4]所述,转换涉及开销(O(n)时间)。 4. **潜在错误**:如引用[2][5]所示,在比较不同对象类型时可能引发异常。 回答结构:-逐步解释。-使用代码示例。-引用相关部分。-最后生成相关问题。用中文回答。大纲: 1. **介绍差异**:解释字符串整数的基本区别。2.**比较方法**:-错误方式:直接比较。-正确方式:转换比较。-使用代码示例。3.**性能考虑**:如引用[4],讨论转换的开销。 4. **常见错误**:如引用[2],提到类型不匹配异常。 5. **最佳实践**:建议如何安全比较。6.**生成相关问题**:基于主题。生成相关问题: -如何高效比较字符串整数?-在Java中处理类型转换时有什么最佳实践?-为什么在比较不同对象类型时会出现IllegalArgumentException?确保LaTeX用于数学表达式:用户的问题中没有明显的数学,但如果有数字或表达式,使用$...$。例如,如果提到时间复杂度,用$O(n)$。 最终回答格式: -清晰的部分。 -代码块用于示例。-引用标识。 -相关问题部分。</think>### Java中字符串'0'与整数0的比较差异 在Java中,字符串(`String`)整数(`int`)是两种完全不同的数据类型。字符串是对象类型(`java.lang.String`),用于表示文本序列;整数是基本类型(`int`)或包装类(`Integer`),用于表示数值。直接比较字符串`"0"`整数`0`会导致错误或意外结果,因为Java不支持跨类型比较。下面我将逐步解释差异、比较方法注意事项。 #### 1. **类型差异与直接比较的错误** - **字符串`"0"`**:是字符序列,存储在堆内存中,属于对象类型。例如:`String str = "0";`。 - **整数`0`**:是数值,基本类型`int`或包装类`Integer`。例如:`int num = 0;`。 - **直接比较失败**:使用`==`或`equals()`直接比较会引发编译错误或逻辑错误,因为类型不兼容。 - 示例代码: ```java String str = "0"; int num = 0; // 编译错误:操作符 == 无法应用于 String, int // boolean isEqual = (str == num); // 错误! // 运行时错误:equals() 方法要求对象类型匹配 // boolean isEqual = str.equals(num); // 返回false,因为num被自动装箱为Integer,但类型不匹配 ``` 在`equals()`方法中,整数`num`会被自动装箱为`Integer`对象,但`String.equals()`要求参数必须是字符串,因此比较结果为`false`[^4]。类似地,在数据库或框架中(如MyBatis),比较不同类型(如`Date``String`)会抛出`IllegalArgumentException`[^2][^5]。 #### 2. **正确比较方法:需要类型转换** 要比较字符串`"0"`整数`0`,必须先将它们转换为相同类型。常用方法有两种: - **将字符串转换为整数**:使用`Integer.parseInt()`或`Integer.valueOf()`。这适合需要数值比较的场景。 - 示例代码: ```java String str = "0"; int num = 0; // 将字符串转换为整数 int strAsInt = Integer.parseInt(str); // 可能抛出NumberFormatException boolean isEqualInt = (strAsInt == num); // 返回true ``` 如果字符串不是有效数字(如`"abc"`),`Integer.parseInt()`会抛出`NumberFormatException`。引用[3]中的`str2Int`函数展示了更健壮的转换逻辑,处理了负数小数点等情况[^3]。 - **将整数转换为字符串**:使用`String.valueOf()`或字符串拼接。这适合需要文本比较的场景。 - 示例代码: ```java String str = "0"; int num = 0; // 将整数转换为字符串 String numAsStr = String.valueOf(num); // 或 "" + num boolean isEqualStr = str.equals(numAsStr); // 返回true ``` 性能注意:转换过程涉及时间空间开销。整数字符串的时间复杂度为$O(d)$,其中$d$是数字的位数(例如,`0`的位数是1)。字符串比较也是$O(n)$($n$为字符串长度)。总体开销约为$3 \times O(n)$,在高性能场景中需谨慎[^4]。 #### 3. **关键差异总结** | 方面 | 字符串`"0"` | 整数`0` | |--------------------|--------------------------------------|----------------------------------| | **数据类型** | `java.lang.String`(对象) | `int`(基本类型)或`Integer`(对象) | | **内存表示** | 字符序列(如Unicode编码) | 二进制数值(如32位int) | | **比较运算符** | 不支持`==`直接比较 | 支持`==`用于数值比较 | | **转换开销** | 整数需解析,可能异常 | 字符串需创建新对象,开销较高 | | **使用场景** | 文本处理(如用户输入) | 数值计算(如数学运算) | #### 4. **最佳实践与注意事项** - **避免直接比较**:始终显式转换类型,防止`ClassCastException`或逻辑错误。在条件语句中(如MyBatis的`<if>`标签),确保类型一致[^5]。 - **处理异常**:转换时捕获`NumberFormatException`,例如: ```java try { int value = Integer.parseInt(str); // 比较逻辑 } catch (NumberFormatException e) { // 处理无效字符串 } ``` - **性能优化**:如果频繁比较,优先使用整数比较(数值操作比字符串高效)。例如,比较用户输入时,先转换为整数再比较。 - **对象与基本类型**:使用`Integer`时,注意自动装箱/拆箱的开销。比较`String``Integer`对象时,`str.equals(num)`会失败,因为`Integer`不是`String`子类[^4]。 通过以上步骤,您可以安全比较字符串`"0"`整数`0`。核心在于类型转换,确保操作符或方法作用于匹配的类型[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值