<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ICU4J API Comparison: ICU4J 4.4 with ICU4J 4.5.1</title>
<!-- Copyright 2010, IBM, All Rights Reserved. -->
</head>
<body>
<h1>ICU4J API Comparison: ICU4J 4.4 with ICU4J 4.5.1</h1>

<hr/>
<h2>Removed from ICU4J 4.4</h2>
<p>(no API removed)</p>

<hr/>
<h2>Deprecated or Obsoleted in ICU4J 4.5.1</h2>
<p>(no API obsoleted)</p>

<hr/>
<h2>Changed in ICU4J 4.5.1 (old, new)</h2>
<p>(no API changed)</p>

<hr/>
<h2>Promoted to stable in ICU4J 4.5.1</h2>
<p>(no API promoted)</p>

<hr/>
<h2>Added in ICU4J 4.5.1</h2>

<h3>Package com.ibm.icu.text</h3>
<ul>
FilteredNormalizer2
<ul>
<li>(draft)      public java.lang.String <i>getDecomposition</i>(int)</li>
<li>(draft)      public java.lang.Appendable <i>normalize</i>(java.lang.CharSequence, java.lang.Appendable)</li>
</ul>
Normalizer2
<ul>
<li>(draft)      public abstract java.lang.String <i>getDecomposition</i>(int)</li>
<li>(draft)      public abstract java.lang.Appendable <i>normalize</i>(java.lang.CharSequence, java.lang.Appendable)</li>
</ul>
</ul>

<h3>Package com.ibm.icu.util</h3>
<ul>
ChineseCalendar
<ul>
<li>(draft)      public <i>ChineseCalendar</i>(int, int, int, int, int)</li>
<li>(draft)      public <i>ChineseCalendar</i>(int, int, int, int, int, int, int, int)</li>
</ul>
VersionInfo
<ul>
<li>(draft)      public static void <i>main</i>(java.lang.String[])</li>
</ul>
</ul>

<hr/>
<p><i><font size="-1">Contents generated by ReportAPI tool on Wed Jun 23 22:57:51 EDT 2010<br/>Copyright (C) 2010, International Business Machines Corporation, All Rights Reserved.</font></i></p>
</body>
</html>
