<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2663444550290590108</id><updated>2024-09-01T16:25:14.797-06:00</updated><category term="java"/><category term="String"/><category term="C#"/><category term="constantes"/><category term="equals"/><category term="int"/><category term="integer"/><category term="StringBuilder"/><category term="hashCode"/><category term="linux"/><category term="operadores"/><category term="GetHashCode"/><category term="cache"/><category term="comparable"/><category term="concat"/><category term="concatenacion"/><category term="Array"/><category term="CompareTo"/><category term="Google"/><category term="IComparable"/><category term="Internet"/><category term="Virtual"/><category term="cadena"/><category term="char"/><category term="comparacion"/><category term="comparar"/><category term="date"/><category term="datetime"/><category term="double"/><category term="fecha"/><category term="float"/><category term="generics"/><category term="hashtable"/><category term="hastable"/><category term="javascript"/><category term="memoria"/><category term="memory"/><category term="properties"/><category term="property"/><category term="punto flotante"/><category term="shell"/><category term="AutoBoxCacheMax"/><category term="C"/><category term="Chrome"/><category term="Flickr"/><category term="Googlemaps"/><category term="Heerramientas windows"/><category term="Navegador"/><category term="Sort"/><category term="Viajes"/><category term="archivos"/><category term="arguments"/><category term="arraylist"/><category term="assert"/><category term="autoboxing"/><category term="años"/><category term="bash"/><category term="basura"/><category term="bean"/><category term="binario"/><category term="binarySearch"/><category term="bloqueo de archivos"/><category term="chatAt"/><category term="collections"/><category term="contant"/><category term="cumpleaños"/><category term="diferencia"/><category term="entero"/><category term="flotante"/><category term="for"/><category term="foreach"/><category term="garbage collector"/><category term="getter"/><category term="hashmap"/><category term="herramientas windows"/><category term="hexadecimal"/><category term="hotmail"/><category term="html"/><category term="iterable"/><category term="iterator"/><category term="junit"/><category term="kernel"/><category term="literal"/><category term="low garbage"/><category term="mail"/><category term="maven"/><category term="method"/><category term="no garbage"/><category term="number"/><category term="option"/><category term="pop3"/><category term="redes"/><category term="select"/><category term="serializacion"/><category term="solaris"/><category term="substring"/><category term="tablas de hash"/><category term="trash"/><category term="trim"/><category term="unit testing"/><category term="unix"/><category term="use &amp; throw"/><category term="valueOf"/><category term="variable"/><category term="variable arguments"/><category term="virtualizacion"/><title type='text'>Optimización</title><subtitle type='html'>Tips de optimización, en español</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-3045348101213867088</id><published>2019-12-22T17:21:00.000-06:00</published><updated>2019-12-22T17:21:46.821-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AutoBoxCacheMax"/><category scheme="http://www.blogger.com/atom/ns#" term="autoboxing"/><category scheme="http://www.blogger.com/atom/ns#" term="cache"/><category scheme="http://www.blogger.com/atom/ns#" term="int"/><category scheme="http://www.blogger.com/atom/ns#" term="integer"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="valueOf"/><title type='text'>Usar y tirar (autoboxing)</title><content type='html'>A partir de java 5 es posible evitar hacer conversiones explícitas de int a java.lang.Integer, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;   public void main() {
      Integer suma1 = sum(1, 2);
      suma1 = sum(1, 2);
   }

   static int sum(Integer a, Integer b) {
      return a + b;
   }
&lt;/pre&gt;
&lt;br /&gt;
Cuando cuando se de-compila el código de la functión main (Útilizando &lt;a href=&quot;https://www.bytecodeviewer.com/&quot; target=&quot;_blank&quot;&gt;Bytecode viewer&lt;/a&gt;), se obtiene lo siguiente:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;     public main() { //()V
         ...

         L1 {
             iconst_1
             invokestatic java/lang/Integer.valueOf(I)Ljava/lang/Integer;
             iconst_2
             invokestatic java/lang/Integer.valueOf(I)Ljava/lang/Integer;
             invokestatic AutoboxExample.sum(Ljava/lang/Integer;Ljava/lang/Integer;)I
             invokestatic java/lang/Integer.valueOf(I)Ljava/lang/Integer;
             astore1
         }
         L3 {
             iconst_1
             invokestatic java/lang/Integer.valueOf(I)Ljava/lang/Integer;
             iconst_2
             invokestatic java/lang/Integer.valueOf(I)Ljava/lang/Integer;
             invokestatic AutoboxExample.sum(Ljava/lang/Integer;Ljava/lang/Integer;)I
             invokestatic java/lang/Integer.valueOf(I)Ljava/lang/Integer;
             astore1
         }
         L4 {
             return
         }
         L2 {
         }
     }&lt;/pre&gt;
&lt;br /&gt;
Donde se ve que el código compilado es idéntico a cuando se utiliza valueOf explícitamente.&lt;br /&gt;
&lt;br /&gt;
Esta funcionalidad del compilador, evita que se creen objetos de tipo &lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html&quot; target=&quot;_blank&quot;&gt;Integer&lt;/a&gt; mediante el constructor &lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#Integer-int-&quot; target=&quot;_blank&quot;&gt;Integer(int)&lt;/a&gt;. Internamente la función &lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#valueOf-int-&quot; target=&quot;_blank&quot;&gt;valueOf(int)&lt;/a&gt;,&amp;nbsp;utiliza un cache,&amp;nbsp; para disminuir la creación de objetos de un solo uso.&lt;br /&gt;
&lt;br /&gt;
Este cache está configurado por defecto para los número de -128 a 127 y se puede configurar para incrementar la cantidad de elementos (-XX:AutoBoxCacheMax=&amp;lt;size&amp;gt;).
</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/3045348101213867088/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2019/12/usar-y-tirar-autoboxing.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/3045348101213867088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/3045348101213867088'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2019/12/usar-y-tirar-autoboxing.html' title='Usar y tirar (autoboxing)'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-7861803960398589214</id><published>2019-11-27T17:03:00.004-06:00</published><updated>2019-11-27T17:03:39.293-06:00</updated><title type='text'>Usar y tirar (foreach)</title><content type='html'>Para iterar sobre un List se puede realizar de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;  List&amp;lt;string&amp;gt; list = ...;

  int size = list.size();
  for (int i = 0; i &amp;lt; size; i++) {
   String str = list.get(i);
   // ...
   System.out.println(str);
  }

&lt;/pre&gt;
&lt;div&gt;
Alternativamente se puede escribir utilizando un interator y un ciclo while:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;  List&amp;lt;string&amp;gt; list = ...;

  Iterator&amp;lt;string&amp;gt; iterator = list.iterator();
  while (iterator.hasNext()) {
   String str = iterator.next();
   // ...
   System.out.println(str);
  }
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;div&gt;
A partir de java 5 se puede escribir así utilizando un foreach:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;  List&amp;lt;string&amp;gt; list = ...;

  for (String str : list) {
   // ...
   System.out.println(str);
  }

&lt;/pre&gt;
Al de-compilar la versión con foreach (última) se observa que el compilador, en genera el mismo código que la versión iterator-while. Pero el iterador es un objeto de &quot;usar y tirar&quot;, debido a su corta vida, por lo que básicamente es basura, por lo que hay que justificar muy bien su uso. El objetivo de utilizar un iterator, se da principalmente en ambiente multi-hilo, donde pueden ocurrir modificaciones, mientras se esta iterando la lista, pero si la iteración se da en un ambiente de un solo hilo, no es necesario crear el iterator y lo ideal es utilizar el for-size.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/7861803960398589214/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/usar-y-tirar-foreach.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/7861803960398589214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/7861803960398589214'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/usar-y-tirar-foreach.html' title='Usar y tirar (foreach)'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-3114701118317662415</id><published>2019-11-26T12:41:00.001-06:00</published><updated>2019-11-27T13:08:29.967-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="arguments"/><category scheme="http://www.blogger.com/atom/ns#" term="basura"/><category scheme="http://www.blogger.com/atom/ns#" term="garbage collector"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="low garbage"/><category scheme="http://www.blogger.com/atom/ns#" term="no garbage"/><category scheme="http://www.blogger.com/atom/ns#" term="trash"/><category scheme="http://www.blogger.com/atom/ns#" term="use &amp; throw"/><category scheme="http://www.blogger.com/atom/ns#" term="variable"/><category scheme="http://www.blogger.com/atom/ns#" term="variable arguments"/><title type='text'>Usar y tirar (vargs)</title><content type='html'>Objetos de un solo uso&lt;br /&gt;
&lt;br /&gt;
Los objetos de un solo uso son comunes y muchas veces no es trivial visualizarlos, pues son creados implícitamente, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt; public static void main(String[] args) {
  test1(&quot;a&quot;, &quot;b&quot;);
  test2(&quot;a&quot;, &quot;b&quot;);
  test3(new String[] { &quot;a&quot;, &quot;b&quot; });
 }
 public static void test1(String... args) {
 }
 public static void test2(String arg1, String arg2) {
 }
 public static void test3(String[] args) {
 }
&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Al de-compilar la función main, utilizando &lt;a href=&quot;https://bytecodeviewer.com/&quot; target=&quot;_blank&quot;&gt;Bytecode Viewer&lt;/a&gt;, se obtiene lo siguiente&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQeljKCYPUZFqsG8oEtjijPw2cMlKans-osqW_4iQNFYz3S4kMzDDsmLkAn8FSSZvzcc-l9UnbSDDnQUHrzAP7kuw267pMRoAho2hhRTGehGw7Di7rhtwqQHScdViPclNaI856PJ_WeMSE/s1600/decomp-waste001.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;569&quot; data-original-width=&quot;632&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQeljKCYPUZFqsG8oEtjijPw2cMlKans-osqW_4iQNFYz3S4kMzDDsmLkAn8FSSZvzcc-l9UnbSDDnQUHrzAP7kuw267pMRoAho2hhRTGehGw7Di7rhtwqQHScdViPclNaI856PJ_WeMSE/s1600/decomp-waste001.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Los segmentos L1 y L3, son la invocación del método test1 y el segmento L5 es la invocación del método test3. El código en ambos casos es idéntico, creando un arreglo de cadenas con longitud 2 (iconst_2 y newarray). La implicación es que se crea un arreglo implícitamente, al invocar una función con argumentos variables.&lt;br /&gt;
&lt;br /&gt;
Si el código se modifica, para invocar 2 veces la misma función:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;  test1(&quot;a&quot;, &quot;b&quot;);

  test1(&quot;a&quot;, &quot;b&quot;);
&lt;/pre&gt;
&lt;br /&gt;
El resultado de de-compilar el .class se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHEsq1id1TR76XaXzI0X0Vcr3eplUB3-RVPt8xUxxqEDBwt_Bir7P0QSbSaaQfJdvOnccrC8g47kBVCiForjHc-YYj04E6Hhtf90QoFEKA_N93ByrzFHAvnjUzBI7so4dHJLCjgyfbYC9J/s1600/decomp-waste002.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;529&quot; data-original-width=&quot;447&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHEsq1id1TR76XaXzI0X0Vcr3eplUB3-RVPt8xUxxqEDBwt_Bir7P0QSbSaaQfJdvOnccrC8g47kBVCiForjHc-YYj04E6Hhtf90QoFEKA_N93ByrzFHAvnjUzBI7so4dHJLCjgyfbYC9J/s1600/decomp-waste002.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Donde es posible ver que se crean 2 arreglos distintos, lo cual provoca que el garbage collector sea invocado demasiadas veces.&lt;br /&gt;
&lt;br /&gt;
Para lidiar con el problema algunas herramientas o APIs, evitan utilizar varargs. Por ejemplo&amp;nbsp;&lt;a href=&quot;https://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Logger.html#debug-org.apache.logging.log4j.Marker-java.lang.String-java.lang.Object-java.lang.Object-java.lang.Object-java.lang.Object-java.lang.Object-java.lang.Object-java.lang.Object-java.lang.Object-java.lang.Object-java.lang.Object-&quot; target=&quot;_blank&quot;&gt;Log4j 2&lt;/a&gt;, declara múltiples funciones con el mismo nombre, pero que reciben parámetros Object desde el 1 hasta el 9.&lt;br /&gt;
&lt;br /&gt;
Funcionalidades similares, se dan con el foreach o la creación de cadenas.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/3114701118317662415/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/usar-y-tirar.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/3114701118317662415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/3114701118317662415'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/usar-y-tirar.html' title='Usar y tirar (vargs)'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQeljKCYPUZFqsG8oEtjijPw2cMlKans-osqW_4iQNFYz3S4kMzDDsmLkAn8FSSZvzcc-l9UnbSDDnQUHrzAP7kuw267pMRoAho2hhRTGehGw7Di7rhtwqQHScdViPclNaI856PJ_WeMSE/s72-c/decomp-waste001.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-1391245825908747338</id><published>2019-11-24T00:05:00.000-06:00</published><updated>2019-11-27T13:14:56.223-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="assert"/><category scheme="http://www.blogger.com/atom/ns#" term="constantes"/><category scheme="http://www.blogger.com/atom/ns#" term="contant"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="junit"/><category scheme="http://www.blogger.com/atom/ns#" term="literal"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="unit testing"/><title type='text'>assert en Java</title><content type='html'>Encontré un caso de uso útil para la sentencia assert de java. Cuando se puede definir una constante dependiente de otra previamente definida, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;    public static final String EXT = &quot;.js&quot;;
&lt;/pre&gt;
&lt;pre&gt;    public static final int EXT_LENGTH = 3;

    static {
        assert EXT_LENGTH == EXT.length();
    }

    public static void main(String[] args) {
        // ...
        String filename = args[0];
        if (filename.endsWith(EXT)) {
            String name = filename.substring(0, filename.length() - EXT_LENGTH);
            System.out.println(name);
            name = filename.substring(0, filename.length() - EXT_LENGTH_ALT);
            System.out.println(name);
        }
        // ...
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Al observar el .class, utilizando BYTECODE VIEWER, podemos ver el código equivalente al generado por el compilador:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_ietndy9fiYod-hSl7NVy9uXL3Qr55UdqxjOi1U3NFAh0Gv6-AVd61Ewc9DN-nHeeZf2vflUda1oHuTJ2eqP5PNIS0y8-kcKNpuQ5lPoTYCdHgSvA2V3fBvuZUwflLOYc4ooUvGgLdHG/s1600/decomp-assert001.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;328&quot; data-original-width=&quot;543&quot; height=&quot;241&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_ietndy9fiYod-hSl7NVy9uXL3Qr55UdqxjOi1U3NFAh0Gv6-AVd61Ewc9DN-nHeeZf2vflUda1oHuTJ2eqP5PNIS0y8-kcKNpuQ5lPoTYCdHgSvA2V3fBvuZUwflLOYc4ooUvGgLdHG/s400/decomp-assert001.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Como es posible observar, al utilizar la constante literal EXT_LENGTH (cuyo valor se conoce en tiempo de compilación), el valor se substituye directamente, mientras que al utilizar la constante, el código no cambia, pues el valor se conoce al momento de la ejecución. El tema de utilizar assert, es validar que cuando se realiza un cambio (por ejemplo de extensión en este caso), se verifique que el valor de la constante literal se modifique también, si se utiliza maven, es posible definir la propiedad enableAssertions con el valor de true, lo que permite que los asserts se evalúen en conjunto con las pruebas unitarias (ver &lt;a href=&quot;https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html&quot; target=&quot;_blank&quot;&gt;Surefire maven plugin&lt;/a&gt;).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/1391245825908747338/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/assert-en-java.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1391245825908747338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1391245825908747338'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/assert-en-java.html' title='assert en Java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_ietndy9fiYod-hSl7NVy9uXL3Qr55UdqxjOi1U3NFAh0Gv6-AVd61Ewc9DN-nHeeZf2vflUda1oHuTJ2eqP5PNIS0y8-kcKNpuQ5lPoTYCdHgSvA2V3fBvuZUwflLOYc4ooUvGgLdHG/s72-c/decomp-assert001.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-7250759532941831426</id><published>2019-11-23T23:47:00.000-06:00</published><updated>2019-11-24T16:22:18.140-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Array"/><category scheme="http://www.blogger.com/atom/ns#" term="arraylist"/><category scheme="http://www.blogger.com/atom/ns#" term="collections"/><category scheme="http://www.blogger.com/atom/ns#" term="for"/><category scheme="http://www.blogger.com/atom/ns#" term="foreach"/><category scheme="http://www.blogger.com/atom/ns#" term="iterable"/><category scheme="http://www.blogger.com/atom/ns#" term="iterator"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>foreach en Java (for para Collections y arrays nativos)</title><content type='html'>A partir de la versión 5 de java la secuencia de control for, puede utilizarse como un foreach. El uso de dicha notación hace que la cantidad de código escrito sea menor, pero tiene sus implicaciones negativas, veamos el siguiente ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;void iterateArray() {&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;String[] array = new String[] { &quot;alfa&quot;, &quot;beta&quot; };&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;for (String current : array) {&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;System.out.println(current);&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;}&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;void iterateCollection() {&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;Collection&lt;string&gt; collection = Arrays.asList(&quot;alfa&quot;, &quot;beta&quot;);&lt;/string&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;for (String current : collection) {&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;   &lt;/span&gt;System.out.println(current);&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;}&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;}&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Ambos códigos se &quot;parecen&quot;, pero al revisar el código generado podemos observar las diferencias de fondo, utilizando &lt;a href=&quot;https://bytecodeviewer.com/&quot; target=&quot;_blank&quot;&gt;BYTECODE VIEWER&lt;/a&gt;, donde es posible decompilar la clase resultante y ver lo que genera el compilador (también muestra las instrucciones de la JVM, pero en este caso nos interesa el código generado)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZATK7blZMu4DmyiBTB9ESjZHWtlMeF3VHv39arInhgkLsMaCAOvIS24en5OCPa_QNPciaQWdFyoQlII8WQ9A_WTTcrdubG3AIirmY7u-IphQXRIj8pG7XbBGzZEXalr-ltatvb1Ju4vux/s1600/decomp-foreach001.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;376&quot; data-original-width=&quot;475&quot; height=&quot;316&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZATK7blZMu4DmyiBTB9ESjZHWtlMeF3VHv39arInhgkLsMaCAOvIS24en5OCPa_QNPciaQWdFyoQlII8WQ9A_WTTcrdubG3AIirmY7u-IphQXRIj8pG7XbBGzZEXalr-ltatvb1Ju4vux/s400/decomp-foreach001.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Como se puede ver, de inicio si bien el código escrito por el programador es menor, el código generador por el compilador, para ser ejecutado por la JVM, es similar al que se empleaba antes de java 5 (es decir sin la sentencia de control foreach). Cabe destacar que ademas por lo generar al ejecutar la instrucción iterator de la colección, se crea un objeto para iterar (ver complementación de Iterable en &lt;a href=&quot;http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/util/ArrayList.java&quot; target=&quot;_blank&quot;&gt;ArrayList&lt;/a&gt; por ejemplo, el cual regresa &quot;new Itr()&quot;)</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/7250759532941831426/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/foreach-for-para-collections-y-arrays.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/7250759532941831426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/7250759532941831426'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2019/11/foreach-for-para-collections-y-arrays.html' title='foreach en Java (for para Collections y arrays nativos)'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZATK7blZMu4DmyiBTB9ESjZHWtlMeF3VHv39arInhgkLsMaCAOvIS24en5OCPa_QNPciaQWdFyoQlII8WQ9A_WTTcrdubG3AIirmY7u-IphQXRIj8pG7XbBGzZEXalr-ltatvb1Ju4vux/s72-c/decomp-foreach001.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-9043203294790977384</id><published>2012-05-22T00:13:00.004-05:00</published><updated>2012-05-22T00:13:53.185-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="date"/><category scheme="http://www.blogger.com/atom/ns#" term="datetime"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><category scheme="http://www.blogger.com/atom/ns#" term="StringBuilder"/><title type='text'>Conversión de una fecha a una cadena</title><content type='html'>Cuando es importante el que el tiempo de respuesta sea mínimo, la conversión a cadenas de tipos complejos, pero comunes, puede volverse importante. Un ejemplo de esto, es la conversión de fechas a cadenas. La mayoría de los APIs de generación de bitácoras, tocan el tema como un factor importante en el desempeño de una aplicación, puesto que la generación de las bitácoras, pueden influir drásticamente en tiempo de respuesta, dada la cantidad de las mismas que pueden generarse.&lt;br /&gt;
&lt;br /&gt;
Para convertir una fecha a una cadena, en un formato determinado, particularmente sin utilizar los nombres de los días o de los meses, se puede realizar utilizando un arreglo de caracteres y utilizando funciones matemáticas simples.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; org&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;test&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;util&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;import&lt;/span&gt;&lt;/b&gt; java&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;util&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;final&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;DateTimeUtil&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;final&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;Calendar&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;final&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; buffer&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;                 calendar &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getInstance&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;                 buffer &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;23&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;];&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;DateTimeUtil&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;18:&lt;/span&gt;         &lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;/**&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;19:&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;         * formato equivalente a &quot;yyyy/MM/dd HH:mm:ss,SSS&quot;&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;20:&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;         */&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;21:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;formatDate&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;long&lt;/span&gt; time&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;22:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; year&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;23:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; month&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;24:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; day&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;25:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; hour&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;26:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; minute&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;27:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; second&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;28:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; millisecond&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;29:&lt;/span&gt;                 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;synchronized&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;calendar&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;30:&lt;/span&gt;                         calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;setTimeInMillis&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;time&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;31:&lt;/span&gt;                         year &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;YEAR&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;32:&lt;/span&gt;                         month &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;MONTH&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;33:&lt;/span&gt;                         day &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;DAY_OF_MONTH&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;34:&lt;/span&gt;                         hour &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;HOUR_OF_DAY&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;35:&lt;/span&gt;                         minute &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;MINUTE&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;36:&lt;/span&gt;                         second &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;SECOND&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;37:&lt;/span&gt;                         millisecond &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Calendar&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;MILLISECOND&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;38:&lt;/span&gt;                 &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;39:&lt;/span&gt;                 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;synchronized&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;40:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; year &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;41:&lt;/span&gt;                         year &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;42:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; year &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;43:&lt;/span&gt;                         year &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;44:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; year &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;45:&lt;/span&gt;                         year &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;46:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; year&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;47:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&#39;/&#39;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;48:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; month &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;49:&lt;/span&gt;                         month &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;50:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; month&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;51:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&#39;/&#39;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;52:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; day &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;53:&lt;/span&gt;                         day &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;54:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; day&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;55:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&#39; &#39;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;56:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; hour &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;57:&lt;/span&gt;                         hour &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;58:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; hour&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;59:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&#39;:&#39;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;60:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; minute &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;61:&lt;/span&gt;                         minute &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;62:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; minute&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;63:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&#39;:&#39;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;64:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;17&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; second &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;65:&lt;/span&gt;                         second &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;66:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; second&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;67:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;19&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&#39;,&#39;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;68:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; millisecond &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;69:&lt;/span&gt;                         millisecond &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;70:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;21&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; millisecond &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;71:&lt;/span&gt;                         millisecond &lt;span style=&quot;color: #990000;&quot;&gt;%=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;72:&lt;/span&gt;                         buffer&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; millisecond&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;73:&lt;/span&gt;                         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;String&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;74:&lt;/span&gt;                 &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;75:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;76:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;77:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;/tt&gt;&lt;/pre&gt;
&lt;br /&gt;
Cómo se puede observar, se utiliza una sola instancia de &lt;a href=&quot;http://java.util.calendar/&quot;&gt;java.util.Calendar&lt;/a&gt;, así como una sola instancia de un arreglo de caracteres, con el fin de minimizar el uso de memoria. Debido a esto, es necesario sincronizar el código que extrae el año, mes, día, hora, minuto, segundo y milisegundo. Posteriormente se libera el objeto calendar y se sincroniza el código que realiza el formateo los datos extraídos previamente, esto utilizando las operaciones división, suma y modulo. Finalmente, se construye una cadena con el arreglo de caracteres.&lt;br /&gt;
&lt;br /&gt;
El formato es fijo, por lo que no hay necesidad de tratar de detectar posibles opciones. No se utilizan formatos que dependan del lenguaje, por lo que la longitud, también es fija. Esto en conjunto ayuda a minimizar el tiempo de respuesta, dando una opción al uso de la clase &lt;a href=&quot;http://java.util.simpledateformat/&quot;&gt;java.util.SimpleDateFormat&lt;/a&gt;, la cual al ser una clase genérica, puede tardar un poco más, debido a la necesidad de resolver las situaciones con el idioma.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/9043203294790977384/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2012/05/conversion-de-una-fecha-una-cadena.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/9043203294790977384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/9043203294790977384'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2012/05/conversion-de-una-fecha-una-cadena.html' title='Conversión de una fecha a una cadena'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-6353720667784191734</id><published>2012-05-17T23:00:00.001-05:00</published><updated>2012-05-17T23:01:25.736-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="constantes"/><category scheme="http://www.blogger.com/atom/ns#" term="double"/><category scheme="http://www.blogger.com/atom/ns#" term="float"/><category scheme="http://www.blogger.com/atom/ns#" term="int"/><category scheme="http://www.blogger.com/atom/ns#" term="integer"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="properties"/><category scheme="http://www.blogger.com/atom/ns#" term="property"/><category scheme="http://www.blogger.com/atom/ns#" term="punto flotante"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><title type='text'>Constantes dinámicas</title><content type='html'>En ocasiones es neceasario cargar valores constantes de un archivo de configuración. Estos archivos de configuración se cargan en memoria parseando el archivo y posteriormente obteniendo la propiedad respectiva de objeto que resulta del parseo del archivo. Incluso puede exiatir la neceaidad de realizar la conversión de la esta a número, fecha, booleano, etc..&lt;br /&gt;
&lt;br /&gt;
El siguiente código es común encontrarlo en cualquier desarrollo (se presume que la variable properties es del tipo &lt;a href=&quot;http://java.util.properties/&quot;&gt;java.util.Properties&lt;/a&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;
 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;while&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;condition&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;

  System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;Float&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;parseFloat&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;properties
    &lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getProperty&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;percent&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)));&lt;/span&gt;
  System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;currentData&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getCurrentAmount&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt; Float&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;parseFloat&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;properties&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getProperty&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;percent&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)));&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;float&lt;/span&gt; amount &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; currentData&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getCurrentAmount&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt; Float&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;parseFloat&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;properties&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getProperty&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;percent&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;));&lt;/span&gt;
  &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;save&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;amount&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;

 &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;

&lt;/tt&gt;&lt;/pre&gt;
Donde, como se puede ver, se parsea hasta 3 veces la misma propiedad. Para solventar este problema, es posible declarar en la clase (o en una clase auxiliar) esta propiedad, incluso realizando la conversión previamente.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;
  &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;final&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;float&lt;/span&gt; PERCENT &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; Float&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;parseFloat&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;properties
   &lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getProperty&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;percent&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;));&lt;/span&gt;
&lt;/tt&gt;&lt;/pre&gt;
&lt;br /&gt;
Y en el código anterior:&amp;nbsp;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;
  &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;while&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;condition&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
    System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;PERCENT&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
    System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;currentData&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getCurrentAmount&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt; PERCENT&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;float&lt;/span&gt; amount &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; currentData&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getCurrentAmount&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt; PERCENT&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
    &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;save&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;amount&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;/tt&gt;&lt;/pre&gt;
&lt;br /&gt;
Con lo cual se evita el procesamiento adiciónal de recuperar la propiedad y posteriormente realizar la conversión.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/6353720667784191734/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2012/05/constantes-dinamicas.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/6353720667784191734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/6353720667784191734'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2012/05/constantes-dinamicas.html' title='Constantes dinámicas'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-1396451591489076734</id><published>2011-10-19T21:48:00.000-05:00</published><updated>2011-10-19T21:48:45.135-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="char"/><category scheme="http://www.blogger.com/atom/ns#" term="chatAt"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><category scheme="http://www.blogger.com/atom/ns#" term="substring"/><title type='text'>Extraer un caracter de una cadena en java</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-4&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-3&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
body.hl { background-color:#eeeeee; }
pre.hl { color:#000000; background-color:#eeeeee; font-size:10pt; font-family:&#39;MS Shell Dlg 2&#39;;}
.hl.num { color:#800080; font-weight:bold; }
.hl.esc { color:#ff00ff; font-weight:bold; }
.hl.str { color:#a68500; }
.hl.pps { color:#0000ff; }
.hl.slc { color:#f27900; }
.hl.com { color:#ff8000; }
.hl.ppc { color:#0080c0; font-weight:bold; }
.hl.opt { color:#ff0080; font-weight:bold; }
.hl.lin { color:#303030; }
.hl.kwa { color:#bb7977; font-weight:bold; }
.hl.kwb { color:#8080c0; font-weight:bold; }
.hl.kwc { color:#0080c0; }
.hl.kwd { color:#004466; }
//--&gt;
&lt;/style&gt;&lt;br /&gt;
En ocasiones, es necesario extraer un caracter de una cadena. Existen varias formas de realizar esta accion, una de ellas, es la siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;String s &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hl str&quot;&gt;&quot;Hola mundo&quot;&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
  s&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl num&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
Sin embargo, la forma optima de realizar esta tarea, es utilizado la funcion &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/String.html#charAt%28int%29&quot;&gt;charAt&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;String s &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hl str&quot;&gt;&quot;Hola mundo&quot;&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
  s&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;charAt&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl num&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl num&quot;&gt;&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
La principal ventaja en utilizar esta ultima funcion, radica en que se obtiene un valor directamente, mientras que en el primer codigo, se obtiene un objeto, por lo que al comparar, en el primer caso, es necesario utilizar la funcion &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/String.html#equals%28java.lang.Object%29&quot;&gt;equals&lt;/a&gt;, mientras que en la segunda se utiliza el operador de comparacion ==, derivado de lo mismo (al menos hasta java 1.6), el valor retornado por la funcion &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/String.html#charAt%28int%29&quot;&gt;charAt&lt;/a&gt;, se puede utilizar dentro de una instruccion switch.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/1396451591489076734/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/10/extraer-un-caracter-de-una-cadena-en.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1396451591489076734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1396451591489076734'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/10/extraer-un-caracter-de-una-cadena-en.html' title='Extraer un caracter de una cadena en java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-2208778040226631386</id><published>2011-08-21T01:45:00.000-05:00</published><updated>2011-08-21T01:45:14.832-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="concat"/><category scheme="http://www.blogger.com/atom/ns#" term="concatenacion"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><category scheme="http://www.blogger.com/atom/ns#" term="StringBuilder"/><title type='text'>Concatenacion de dos cadenas (concat)</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;La &lt;a href=&quot;http://es.wikipedia.org/wiki/Concatenacion&quot;&gt;concatenacion&lt;/a&gt; de cadenas, es una operacion ampliamente utilizada en los lenguajes de programacion. Pero en el caso de algunos lenguajes compilados, existen metodos poco utilizados, pero muy utiles. Un ejemplo es el metodo &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/String.html#concat%28java.lang.String%29&quot;&gt;java.lant.String.concat&lt;/a&gt; o &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/a6d350wd.aspx&quot;&gt;System.String.Concat&lt;/a&gt; que tienen algunos lenguajes de programación como java o C#. Veamos por que.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cuando es necesario concatenar exactamente 2 cadenas y utilizar inmediatamente el resultado de esto (por ejemplo, agregar una extension a un nombre de archivo, para crearlo) es recomendable utilizar este metodo y no algun otro alternativo, como el uso de operadores o de clases auxiliares, como lo es &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html&quot;&gt;java.lang.StringBuilder&lt;/a&gt; o &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.text.stringbuilder%28v=vs.71%29.aspx&quot;&gt;System.StringBuilder&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
¿Que ocurre, cuando se emplea StringBuilder?&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Creacion del objeto StringBuilder, inicializado, con la primer cadena (Creacion del primer objeto)&lt;/li&gt;
&lt;li&gt;Agregar los elementos caracteres de la segunda cadena (posiblemente expandiendo el buffer del builder, posiblemente creando el segundo objeto implicito, un arreglo de caracteres).&lt;/li&gt;
&lt;li&gt;Crear un nuevo objeto cadena (Creacion del segundo o tercer objeto)&lt;/li&gt;
&lt;/ol&gt;¿Que ocurre cuando se emplea el metodo concat?&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Cracion de un nuevo objeto cadena, con la longitud exacta de la suma de ambos elementos (Creacion del primer y unico nuevo objeto)&lt;/li&gt;
&lt;li&gt;Copiar los elementos de la primer cadena&lt;/li&gt;
&lt;li&gt;Copiar los elementos de la segunda cadena&lt;/li&gt;
&lt;/ol&gt;Cuando se trata de concatenar exactamente dos cadenas, el metodo concat es optimo, en terminos de uso de memoria, por que solo utiliza la cantidad exacta de memoria, mientras que la clase StringBuilder, al ser generica (para concatenar cualquier cantidad de cadenas) aloja bloques de memoria de tamaños distintos, tratando de evitar alojar memoria posteriormente (normalmente, son bloques cada vez mas grandes) y al finalmente, crea un objeto String, con el resultado de la concatenacion.&lt;br /&gt;
&lt;br /&gt;
Nota: Dependiendo del lenguaje de programacion, asi como la version del mismo, el metodo de concatenacion, puede o no tener alguna de las siguientes optimizaciones.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;Si el metodo recibe dos parametros exactamente y es miembro estatico&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Si ambos parametros son nulos, se regresa la cadena vacia.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Cuando alguno de los dos parametros es nulo, se regresa el otro parametro.&lt;/li&gt;
&lt;li&gt;Cuando alguno de los dos parametros es la cadena vacia, se regresa el otro parametro.&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Cuando el metodo no es estatico y se invoca utilizando un objeto de la clase String&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Si el parametro que se recibe es nulo, se regresa la cadena referenciada por this.&lt;/li&gt;
&lt;li&gt;Si el parametro que se recibe es la cadena vacia, se regresa la cadena referenciada por this.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/2208778040226631386/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/08/concatenacion-de-dos-cadenas-concat.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/2208778040226631386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/2208778040226631386'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/08/concatenacion-de-dos-cadenas-concat.html' title='Concatenacion de dos cadenas (concat)'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-1121664499928829784</id><published>2011-07-15T22:23:00.000-05:00</published><updated>2011-07-15T22:23:17.916-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cache"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="memoria"/><category scheme="http://www.blogger.com/atom/ns#" term="memory"/><category scheme="http://www.blogger.com/atom/ns#" term="Virtual"/><title type='text'>Utilizar la memoria RAM como cache en Linux (ramdisk)</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;La mayoria de las distribuciones de linux cuentan con la capacidad de utilizar la &lt;a href=&quot;http://en.wikipedia.org/wiki/Random-access_memory&quot;&gt;memoria de acceso aleatorio&lt;/a&gt; como un &lt;a href=&quot;http://en.wikipedia.org/wiki/File_system&quot;&gt;sistema de archivos&lt;/a&gt; normal, donde se puede crear, leer, escribir y borrar un archivo, asi como crear directorios y borrarlos.&lt;br /&gt;
&lt;br /&gt;
Lo primero que hay que ubicar, es que existan los archivos que inician con el prefijo &lt;i&gt;ram&lt;/i&gt;, en el directorio &lt;a href=&quot;http://en.wikipedia.org/wiki//dev&quot;&gt;/dev&lt;/a&gt;. Al ejecutar el listado de estos archivos, se obtiene una salida similar a esta:&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; $ ls -l /dev/ram*&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  0 Jul 14 22:36 /dev/ram0&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  1 Jul 14 22:49 /dev/ram1&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1, 10 Jul 14 22:36 /dev/ram10&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1, 11 Jul 14 22:36 /dev/ram11&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1, 12 Jul 14 22:36 /dev/ram12&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1, 13 Jul 14 22:36 /dev/ram13&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1, 14 Jul 14 22:36 /dev/ram14&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1, 15 Jul 14 22:36 /dev/ram15&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  2 Jul 14 22:36 /dev/ram2&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  3 Jul 14 22:36 /dev/ram3&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  4 Jul 14 22:36 /dev/ram4&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  5 Jul 14 22:36 /dev/ram5&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  6 Jul 14 22:36 /dev/ram6&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  7 Jul 14 22:36 /dev/ram7&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  8 Jul 14 22:36 /dev/ram8&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; brw-rw----. 1 root disk 1,  9 Jul 14 22:36 /dev/ram9&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Para formatear y utilizar estos archivos, es necesario hacerlo como el usuario &lt;a href=&quot;http://en.wikipedia.org/wiki/Superuser&quot;&gt;root&lt;/a&gt;. Esto, debido a que el propietario de los archivos es &lt;a href=&quot;http://en.wikipedia.org/wiki/Superuser&quot;&gt;root&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; $ su -&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; Password:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; # mkfs.ext2 -q /dev/ram1&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; # mkdir tmp&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; # mount /dev/ram1 tmp&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; # df -k tmp&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; Filesystem           1K-blocks      Used Available Use% Mounted on&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; /dev/ram1                15863       140     14904   1% /root/tmp&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Ahora en el directorio tmp, se tiene un sistema de archivos, que utiliza la &lt;a href=&quot;http://en.wikipedia.org/wiki/Random-access_memory&quot;&gt;memoria de acceso aleatorio&lt;/a&gt;, como un directorio normal dentro del sistema. Cabe destacar que este directorio, sera destruido cuando se reinicie el sistema, por lo que cualquier informacion importante, debe ser respaldada previamente antes de reiniciar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/1121664499928829784/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/07/utilizar-la-memoria-ram-como-cache-en.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1121664499928829784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1121664499928829784'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/07/utilizar-la-memoria-ram-como-cache-en.html' title='Utilizar la memoria RAM como cache en Linux (ramdisk)'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-777668218193858745</id><published>2011-07-14T02:24:00.002-05:00</published><updated>2011-07-14T17:30:22.661-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cache"/><category scheme="http://www.blogger.com/atom/ns#" term="kernel"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="memoria"/><category scheme="http://www.blogger.com/atom/ns#" term="memory"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><title type='text'>Utilizar la memoria RAM como cache automatico en Linux</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;En los sistemas linux, el uso de memoria RAM como cache, es gestionado por el kernel de manera automatica, sin necesidad de configurar o ejecutar los programas de manera distinta a la usual.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Veamos el siguiente ejemplo, en el cual, se tiene un archivo de 25.85M aproximadamente.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; $ ls -l archivo.bin &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; -rwxr-xr-x. 1 cmartine cmartine 27109840 Jul&amp;nbsp; 1 10:52 archivo.bin&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Utilizando el comando &lt;a href=&quot;http://en.wikipedia.org/wiki/Time_%28Unix%29&quot;&gt;time&lt;/a&gt;, para determinar el tiempo de ejecucion y el comando &lt;a href=&quot;http://en.wikipedia.org/wiki/Cat_%28Unix%29&quot;&gt;cat&lt;/a&gt; para realizar la lectura del archivo, obtenemos lo siguiente en la primer ejecucion. Nota: se envia la salida al dispositivo &lt;a href=&quot;http://en.wikipedia.org/wiki/Null_device&quot;&gt;/dev/null&lt;/a&gt;, para descartarla.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; $ time cat archivo.bin &amp;gt; /dev/null&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; real&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.466s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; user&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.002s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;0m0.123s&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;El tiempo que se tardo en ejecutar fue de 0.466 segundo. Posteriormente, ejecutando el mismo comando inmediatamente 3 veces seguidas, se obtiene el siguiente resultado:&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; $ time cat archivo.bin &amp;gt; /dev/null&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; real&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.040s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; user&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.002s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.037s&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; $ time cat archivo.bin &amp;gt; /dev/null&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; real&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.026s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; user&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.001s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.025s&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; $ time cat archivo.bin &amp;gt; /dev/null&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; real&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.029s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; user&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.000s&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.025s&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Como se puede observar, el tiempo real, disminuyo drasticamente a menos de la decima parte del tiempo original. Esto es debido a que el kernel de linux maneja de manera automatica la memoria RAM que no se emplea en crear un cache de los archivos utilizados, sin necesidad de realizar configuracion alguna. La cantidad de memoria que esta siendoutilizada en este cache, se puede consultar utilizando el comando top.&lt;/div&gt;&lt;br /&gt;
¿Por que linux hace esto? Sencillamente por que si no se emplea la memoria, estaria desocupada (desperdiciandose cuando el sistema no la esta utilizando para realizar algun trabajo). Es importante aclara, que cuando se ejecuta un programa, el cual requiere utilizar mucha memoria, se libera parte de la memoria utilizada para el cache y se asigna al programa, pudiendo llegar a la situacion en que el cache ya no tenga memoria asignada, por que un programa requiere utilizar toda la memoria del sistema</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/777668218193858745/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/07/memoria-ram-como-cache-automatico-en.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/777668218193858745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/777668218193858745'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/07/memoria-ram-como-cache-automatico-en.html' title='Utilizar la memoria RAM como cache automatico en Linux'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-1210976189625641081</id><published>2011-06-23T14:19:00.003-05:00</published><updated>2011-06-23T15:06:44.197-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="archivos"/><category scheme="http://www.blogger.com/atom/ns#" term="bash"/><category scheme="http://www.blogger.com/atom/ns#" term="comparacion"/><category scheme="http://www.blogger.com/atom/ns#" term="comparar"/><category scheme="http://www.blogger.com/atom/ns#" term="date"/><category scheme="http://www.blogger.com/atom/ns#" term="datetime"/><category scheme="http://www.blogger.com/atom/ns#" term="fecha"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="shell"/><category scheme="http://www.blogger.com/atom/ns#" term="solaris"/><category scheme="http://www.blogger.com/atom/ns#" term="unix"/><title type='text'>Comparacion entre 2 fechas</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;Comparar 2 fechas, para determinar cual es mayor, puede ser sencillo, sobre todo, si con lo que trabajas soporta el concepto de fecha y/o tiempo, por ejemplo: &lt;a href=&quot;http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html&quot;&gt;java.util.Date&lt;/a&gt; en java o &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.datetime.aspx&quot;&gt;System.DateTime&lt;/a&gt; en C#, que son lenguajes de programacion o incluso en hojas de datos, tipo Microsoft Excel o LibreOffice Calc.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;El problema, se presenta, cuando es necesario trabajar con lenguajes que no conocen el concepto, como los shells de unix o cuando se almacenan archivos que contienen la fecha en el nombre del mismo.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;En este punto la abstraccion de la fecha y la forma en como se representa, suele tomar un papel importante, dado que puede resolver completamente el problema, si se emplea el formato correcto.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Formas comunes de representar una fecha son: dia/mes/año en mexico o mes/dia/año en EEUU. Para nombres de archivos se suelen substituir las diagonales, por guiones, asi como el uso del nombre del mes y no el numero de mes. Por ejemplo:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Jun/27/2011&lt;/li&gt;
&lt;li&gt;Oct/21/2011 &lt;/li&gt;
&lt;li&gt;Jul/1/2011&lt;/li&gt;
&lt;li&gt;Oct/24/2005&lt;/li&gt;
&lt;li&gt;Jul/4/2011 &lt;/li&gt;
&lt;/ul&gt;Si se ordena alfabeticamente, se obtiene lo siguiente:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Jul/1/2011&lt;/li&gt;
&lt;li&gt;Jul/4/2011 &lt;/li&gt;
&lt;li&gt;Jun/27/2011&lt;/li&gt;
&lt;li&gt;Oct/21/2011 &lt;/li&gt;
&lt;li&gt;Oct/24/2005 &lt;/li&gt;
&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Lo cual no es lo que se requiere, sin embargo, si se reacomoda la fecha utilizando el orden año, mes, dia:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;2011/Jun/27&lt;/li&gt;
&lt;li&gt;2011/Oct/21 &lt;/li&gt;
&lt;li&gt;2011/Jul/1&lt;/li&gt;
&lt;li&gt;2005/Oct/24&lt;/li&gt;
&lt;li&gt;2011/Jul/4 &lt;/li&gt;
&lt;/ul&gt;Al ordenar se obtiene lo siguiente:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;2005/Oct/24&lt;/li&gt;
&lt;li&gt;2011/Jul/1&lt;/li&gt;
&lt;li&gt; 2011/Jul/4 &lt;/li&gt;
&lt;li&gt;2011/Jun/27&lt;/li&gt;
&lt;li&gt;2011/Oct/21 &lt;/li&gt;
&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;El problema con el que nos encontramos es que la l esta antes que la n, en orden alfabetico, para sortear este inconveniente, en vez del nombre del mes, utilizamos el numero del mes:&lt;/div&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;2011/6/27&lt;/li&gt;
&lt;li&gt;2011/10/21 &lt;/li&gt;
&lt;li&gt;2011/7/1&lt;/li&gt;
&lt;li&gt;2005/10/24&lt;/li&gt;
&lt;li&gt;2011/7/4&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;Al ordenar, obtenemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;2005/10/24&lt;/li&gt;
&lt;li&gt;2011/6/27&lt;/li&gt;
&lt;li&gt;2011/10/1&lt;/li&gt;
&lt;li&gt;2011/7/1&lt;/li&gt;
&lt;li&gt;2011/7/4&lt;/li&gt;
&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;Este resultado tampoco es correcto, esto es debido a que la longitud de los meses, es variable, por lo que, agregamos un 0 a la izquierda, cuando el mes esta formado por un solo digito (es recomendable tambien hacerlo para los dias)&lt;/div&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;2011/06/27&lt;/li&gt;
&lt;li&gt;2011/10/21 &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;2011/07/01&lt;/li&gt;
&lt;li&gt;2005/10/24&lt;/li&gt;
&lt;li&gt;2011/07/04&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;Al ordenar, obtenemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;2005/10/24&lt;/li&gt;
&lt;li&gt;2011/06/27&lt;/li&gt;
&lt;li&gt;2011/07/01&lt;/li&gt;
&lt;li&gt;2011/07/04&lt;/li&gt;
&lt;li&gt;2011/10/01 &lt;/li&gt;
&lt;/ul&gt;Que es finalmente lo que se requiere.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Esto, se puede aplicar a la creacion de nombres de archivos, por ejemplo, para poder ordenarlos por una fecha en particular, sobre todo cuando la fecha de creacion, es incorrecta (cuando son enviados por correo electronico y se pierde la fecha de creacion del archivo), por ejemplo los siguientes nombres de archivos seran ordenados correctamente por el sistema operativo al momento de listarlos (esto tanto en windows, linux o mac os)&lt;/div&gt;&lt;ul&gt;&lt;li&gt;reporte_2011-06-27.txt&lt;/li&gt;
&lt;li&gt;reporte_2011-10-21.txt&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;reporte_2011-07-01.txt&lt;/li&gt;
&lt;li&gt;reporte_2005-10-24.txt&lt;/li&gt;
&lt;li&gt;reporte_2011-07-04.txt&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;Al ser listados, se obtiene lo siguiente:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;reporte_2005-10-24.txt&lt;/li&gt;
&lt;li&gt;reporte_2011-06-27.txt&lt;/li&gt;
&lt;li&gt;reporte_2011-07-01.txt&lt;/li&gt;
&lt;li&gt;reporte_2011-07-04.txt&lt;/li&gt;
&lt;li&gt;reporte_2011-10-21.txt&lt;/li&gt;
&lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;En unix, incluso, es posible emplear las fechas en este formato, con el comando &lt;a href=&quot;http://en.wikipedia.org/wiki/Expr&quot;&gt;expr&lt;/a&gt;, el cual puede comparar dos cadenas y determinar cual es mayor o menor.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/1210976189625641081/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/06/comparacion-de-2-fechas.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1210976189625641081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1210976189625641081'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/06/comparacion-de-2-fechas.html' title='Comparacion entre 2 fechas'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-8510008875779648765</id><published>2011-05-05T22:43:00.002-05:00</published><updated>2011-05-10T21:29:33.294-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="CompareTo"/><category scheme="http://www.blogger.com/atom/ns#" term="IComparable"/><category scheme="http://www.blogger.com/atom/ns#" term="int"/><category scheme="http://www.blogger.com/atom/ns#" term="integer"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><title type='text'>Implementación la funcion compareTo de IComparable en C#</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-4&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-3&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
body.hl { background-color:#eeeeee; }
pre.hl { color:#000000; background-color:#eeeeee; font-size:10pt; font-family:&#39;MS Shell Dlg 2&#39;;}
.hl.num { color:#800080; font-weight:bold; }
.hl.esc { color:#ff00ff; font-weight:bold; }
.hl.str { color:#a68500; }
.hl.pps { color:#0000ff; }
.hl.slc { color:#f27900; }
.hl.com { color:#ff8000; }
.hl.ppc { color:#0080c0; font-weight:bold; }
.hl.opt { color:#ff0080; font-weight:bold; }
.hl.lin { color:#303030; }
.hl.kwa { color:#bb7977; font-weight:bold; }
.hl.kwb { color:#8080c0; font-weight:bold; }
.hl.kwc { color:#0080c0; }
.hl.kwd { color:#004466; }
//--&gt;
&lt;/style&gt;&lt;br /&gt;
La interfaces &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.icomparable.aspx&quot;&gt;IComparable&lt;/a&gt; e &lt;t&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/4d7sx9hd.aspx&quot;&gt;IComparable&amp;lt;t&amp;gt;&lt;/a&gt;&lt;/t&gt; de C#, se utilizan para comparar objetos, normalmente del mismo tipo y determinar, si alguno es mayor, menor o la equivalencia. A continuacion, se presentan 4 ejemplos de como implementar esta funcionalidad.&lt;br /&gt;
&lt;br /&gt;
Nota1: Para el primer ejemplo, se utiliza el concepto de &lt;a href=&quot;http://en.wikipedia.org/wiki/National_identification_number&quot;&gt;National Identification Number&lt;/a&gt; (CURP en México, RUN en Chile, DNI en España y Argentina o Tarjeta de Identidad en colombia, por ejemplo)&lt;br /&gt;
Nota2: Por razones de compatibilidad, se implementan 2 interfaces distintas, con funcionalidades similares, en la implementacion de estas clases.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl kwa&quot;&gt;class&lt;/span&gt; Person1 &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;,&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;Person1&lt;span class=&quot;hl opt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; nin&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;hl slc&quot;&gt;// National Identification Number&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;hl slc&quot;&gt;//...&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl kwb&quot;&gt;object&lt;/span&gt; obj&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;obj is Person1&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; obj &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt; ? &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; nin&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(((&lt;/span&gt;Person1&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;obj&lt;span class=&quot;hl opt&quot;&gt;).&lt;/span&gt;nin&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;throw new&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;ArgumentException&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Person1 p&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; p &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt; ? &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; nin&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;p&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;nin&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;hl kwa&quot;&gt;class&lt;/span&gt; Person2 &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;,&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;Person2&lt;span class=&quot;hl opt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;hl slc&quot;&gt;//...&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl kwb&quot;&gt;object&lt;/span&gt; obj&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;obj is Person2&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; obj &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt; ? &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; id&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(((&lt;/span&gt;Person2&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;obj&lt;span class=&quot;hl opt&quot;&gt;).&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;throw new&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;ArgumentException&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Person2 p&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; p &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt; ? &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; id&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;p&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;


    &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;hl kwa&quot;&gt;class&lt;/span&gt; Person3 &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;,&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;Person3&lt;span class=&quot;hl opt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;hl slc&quot;&gt;//...&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl kwb&quot;&gt;object&lt;/span&gt; obj&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;obj &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;else&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;obj is Person3&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                    Person3 o &lt;span class=&quot;hl opt&quot;&gt;= (&lt;/span&gt;Person3&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;obj&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
                    &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; id &lt;span class=&quot;hl opt&quot;&gt;-&lt;/span&gt; o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;throw new&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;ArgumentException&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;();&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Person3 p&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; p &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt; ? &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; id &lt;span class=&quot;hl opt&quot;&gt;-&lt;/span&gt; p&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;hl kwa&quot;&gt;class&lt;/span&gt; Person4 &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;,&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;IComparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;Person4&lt;span class=&quot;hl opt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; idPart1&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; idPart2&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;string&lt;/span&gt; surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;hl slc&quot;&gt;//...&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo0&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Person4 p&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; v &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; idPart1 &lt;span class=&quot;hl opt&quot;&gt;-&lt;/span&gt; p&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;idPart1&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;v &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                v &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; idPart2&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;p&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;idPart2&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; v&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl kwb&quot;&gt;object&lt;/span&gt; obj&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;obj &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;else&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;obj is Person4&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo0&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;((&lt;/span&gt;Person4&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;obj&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;throw new&lt;/span&gt; System&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;ArgumentException&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;();&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Person4 p&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;p &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;hl kwa&quot;&gt;else&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;CompareTo0&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;p&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;En el primer y segundo ejemplo, se implementa la funcionalidad, utilizando la funcion &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/43hc6wht.aspx&quot;&gt;CompareTo&lt;/a&gt; implementada por la clase &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.string.aspx&quot;&gt;string&lt;/a&gt; y por la estructura &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.int32.aspx&quot;&gt;int32&lt;/a&gt;. Regresando el resultado de ejecutar dicha funcion. En el tercer ejemplo, se muestra, como se puede implementar utilizando la diferencia entre 2 enteros (es posible utilizar cualquier tipo entero, como un byte, short, int). Finalmente, en el cuarto ejemplo, se implementa la funcionalidad utilizando 2 propiedades, donde se compara la primer propiedad y en caso de igualdad, se regresa el resultado de comparar la segunda propiedad. Tambiem, en este ultimo ejemplo, define una funcion intermedia (CompareTo0), la cual hace la comparacion real y es llamada por las 2 implementaciones del CompareTo.&lt;br /&gt;
&lt;br /&gt;
Como se observa. por razones de compatibilidad, es necesario implementar la funcionalidad de 2 interfaces, una utlizando Generics y otra sin pre-generics. En la version Generics, es necesario validar que el tipo de corresponde con la clase que implementa, en caso de no coincidir, hay que generar una excepcion del tipo &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.argumentexception.aspx&quot;&gt;ArgumentException&lt;/a&gt;. En el caso del null, la documentacion tambien especifica regresar 1 explicitamente. Final mente, en C#, como en C, se especifican valores validos cualquier entero positivo, negativo o cero (dentro de los rangos de &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.int32.aspx&quot;&gt;int32&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Es recomendable, por cuestiones de simplicidad en la implementacion, incluir en la comparacion solo los valores que corresponden a la llave primaria, comparandolos, en orden de importancia, regresando el valor, del primero que resulte distinto (como se muestra en el ejemplo 4).&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/8510008875779648765/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/05/implementacion-la-funcion-compareto-de.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/8510008875779648765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/8510008875779648765'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/05/implementacion-la-funcion-compareto-de.html' title='Implementación la funcion compareTo de IComparable en C#'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-6017453903423329119</id><published>2011-04-28T00:15:00.009-05:00</published><updated>2011-05-04T21:24:32.953-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="comparable"/><category scheme="http://www.blogger.com/atom/ns#" term="CompareTo"/><category scheme="http://www.blogger.com/atom/ns#" term="int"/><category scheme="http://www.blogger.com/atom/ns#" term="integer"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><title type='text'>Implementación la funcion compareTo de Comparable en java</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-4&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-3&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;La interface &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html&quot;&gt;Comparable &lt;/a&gt;se emplea, para indicar si el objeto representado por &lt;a href=&quot;http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html&quot;&gt;this&lt;/a&gt;  es menor, igual o mayor que el objeto que se pasa como parametro. A continuacion se presentan 3 ejemplos de clases que definen la funcion &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html#compareTo%28T%29&quot;&gt;compareTo&lt;/a&gt; en base a una propiedad existente. Nota, en algunos paises existe el concepto de &lt;a href=&quot;http://en.wikipedia.org/wiki/National_identification_number&quot;&gt;National Identification Number&lt;/a&gt; (CURP en México, RUN en Chile, DNI en España y Argentina o Tarjeta de Identidad en colombia, por ejemplo)&lt;/div&gt;&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
body.hl { background-color:#eeeeee; }
pre.hl { color:#000000; background-color:#eeeeee; font-size:10pt; font-family:&#39;MS Shell Dlg 2&#39;;}
.hl.num { color:#800080; font-weight:bold; }
.hl.esc { color:#ff00ff; font-weight:bold; }
.hl.str { color:#a68500; }
.hl.pps { color:#0000ff; }
.hl.slc { color:#f27900; }
.hl.com { color:#ff8000; }
.hl.ppc { color:#0080c0; font-weight:bold; }
.hl.opt { color:#ff0080; font-weight:bold; }
.hl.lin { color:#303030; }
.hl.kwa { color:#bb7977; font-weight:bold; }
.hl.kwb { color:#8080c0; font-weight:bold; }
.hl.kwc { color:#0080c0; }
.hl.kwd { color:#004466; }
//--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl kwa&quot;&gt;public class&lt;/span&gt; ExamplePerson1 &lt;span class=&quot;hl kwa&quot;&gt;implements&lt;/span&gt; Comparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;ExamplePerson1&lt;span class=&quot;hl opt&quot;&gt;&amp;gt; {&lt;/span&gt;

 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String nin&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;hl slc&quot;&gt;// National Identification Number&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

 &lt;span class=&quot;hl opt&quot;&gt;...&lt;/span&gt;

 &lt;span class=&quot;hl kwc&quot;&gt;@Override&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;ExamplePerson1 o&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
  &lt;span class=&quot;hl kwa&quot;&gt;return this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;nin&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;nin&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
 &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl kwa&quot;&gt;public class&lt;/span&gt; ExamplePerson2 &lt;span class=&quot;hl kwa&quot;&gt;implements&lt;/span&gt; Comparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;ExamplePerson2&lt;span class=&quot;hl opt&quot;&gt;&amp;gt; {&lt;/span&gt;

 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; Integer id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

 &lt;span class=&quot;hl opt&quot;&gt;...&lt;/span&gt;

 &lt;span class=&quot;hl kwc&quot;&gt;@Override&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;ExamplePerson2 o&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
  &lt;span class=&quot;hl kwa&quot;&gt;return this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
 &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl kwa&quot;&gt;public class&lt;/span&gt; ExamplePerson3 &lt;span class=&quot;hl kwa&quot;&gt;implements&lt;/span&gt; Comparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;ExamplePerson3&lt;span class=&quot;hl opt&quot;&gt;&amp;gt; {&lt;/span&gt;

 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

 &lt;span class=&quot;hl opt&quot;&gt;...&lt;/span&gt;

 &lt;span class=&quot;hl kwc&quot;&gt;@Override&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;ExamplePerson3 o&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
  &lt;span class=&quot;hl kwa&quot;&gt;return this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt; o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id ? &lt;span class=&quot;hl opt&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;: (&lt;/span&gt;&lt;span class=&quot;hl kwa&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id ? &lt;span class=&quot;hl num&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
 &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;En el ejemplo 1 y 2, se emplean propiedades de tipo &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/String.html&quot;&gt;String&lt;/a&gt; e &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Integer.html&quot;&gt;Integer&lt;/a&gt; las cuales implementan la interface &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html&quot;&gt;Comparable&lt;/a&gt;, por lo que solo se regresa el resultado de llamar la funcion &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html#compareTo%28T%29&quot;&gt;compareTo&lt;/a&gt; de la propiedad respectiva. En el ejemplo 3 se utiliza una propiedad de tipo nativo y se muestra un ejemplo de como puede implementarse la funcion, utilizando las clases que envuelven a los tipos nativos (&lt;a href=&quot;http://download.oracle.com/javase/tutorial/collections/implementations/wrapper.html&quot;&gt;wrappers&lt;/a&gt;), evitando el uso de autoboxing y autounboxing.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;En estos ejemplos, solo se emplea una propiedad, para implementar la funcionalidad. La recomendacion, es utilizar solo los atributos que forman la llave primaria (el concepto de base de datos). En caso de requerir utilizar mas de una propiedad, se incremanta el grado de complejidad. Como se muestra en el siguiente ejemplo.&lt;/div&gt;&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl kwa&quot;&gt;public class&lt;/span&gt; ExamplePerson4 &lt;span class=&quot;hl kwa&quot;&gt;implements&lt;/span&gt; Comparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;ExamplePerson4&lt;span class=&quot;hl opt&quot;&gt;&amp;gt; {&lt;/span&gt;

 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; Integer idPart1&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; Integer idPart2&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

 &lt;span class=&quot;hl opt&quot;&gt;...&lt;/span&gt;

 &lt;span class=&quot;hl kwc&quot;&gt;@Override&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;ExamplePerson4 o&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
  &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; result &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;idPart1&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;idPart1&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;result &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
   result &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;idPart2&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;idPart2&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; result&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Como se observa, si la comparacion de la primer propiedad es cero, hay que comparar la segunda propiedad y asi sucesivamente, hasta encontrar una distinta o ya no tener mas propiedades.&lt;/div&gt;&lt;br /&gt;
--- Actualizacion ---&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;En ocasiones, es necesario evitar que la comparacion genere una excepcion del tipo &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/NullPointerException.html&quot;&gt;NullPointerException&lt;/a&gt;, cuando el parametro que recibe la funcion &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html#compareTo%28T%29&quot;&gt;compareTo&lt;/a&gt;, es null. Para procesar el null, es necesario insertar un if para validar si es null, en caso de ser null, se regresa el valor necesario (normalmente 0), en caso contrario, se regresa el valor calculado, utilizando el algoritmo descrito anteriormente.&lt;/div&gt;&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl kwa&quot;&gt;public class&lt;/span&gt; ExamplePerson5 &lt;span class=&quot;hl kwa&quot;&gt;implements&lt;/span&gt; Comparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;ExamplePerson5&lt;span class=&quot;hl opt&quot;&gt;&amp;gt; {&lt;/span&gt;

 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; Integer id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

 &lt;span class=&quot;hl opt&quot;&gt;...&lt;/span&gt;

 &lt;span class=&quot;hl kwc&quot;&gt;@Override&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;ExamplePerson5 o&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
  &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; o &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; null ? &lt;span class=&quot;hl num&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
 &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Existe la posibilidad de implmentarlo utilizando un try-catch, en vez de utilizar un if. Si bien en apariencia no se ejecutan 2 operaciones, cuando se emplea el if (primero la comparacion contra null y posteriormente la evaluacion del if en si). En la practica no es optimo, dado que cuando se recibe un null, se genera una excepcion, que implicitamente es, la creacion del objeto excepcion, el llenado del stack (que en el caso de un programa muy sencillo son 3 o 4 elementos en el stack, pero en el caso de sistemas complejos, pueden ser mas de 50 elementos).&lt;/div&gt;&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl kwa&quot;&gt;public class&lt;/span&gt; ExamplePerson6 &lt;span class=&quot;hl kwa&quot;&gt;implements&lt;/span&gt; Comparable&lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt;ExamplePerson6&lt;span class=&quot;hl opt&quot;&gt;&amp;gt; {&lt;/span&gt;

 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; Integer id&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String name&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;private&lt;/span&gt; String surname&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;

 &lt;span class=&quot;hl opt&quot;&gt;...&lt;/span&gt;

 &lt;span class=&quot;hl kwc&quot;&gt;@Override&lt;/span&gt;
 &lt;span class=&quot;hl kwa&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;ExamplePerson6 o&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
  &lt;span class=&quot;hl kwa&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;hl kwa&quot;&gt;return this&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;compareTo&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;NullPointerException e&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
   &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;En conclusion, siempre es recomendable utilizar un if, si se necesita regresar un valor en caso de que el parametro sea null y evitar el uso de un try-catch.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/6017453903423329119/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/04/implementacion-la-funcion-compareto-de.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/6017453903423329119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/6017453903423329119'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/04/implementacion-la-funcion-compareto-de.html' title='Implementación la funcion compareTo de Comparable en java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-502227478149194313</id><published>2011-04-27T21:36:00.001-05:00</published><updated>2011-06-07T18:09:02.450-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="años"/><category scheme="http://www.blogger.com/atom/ns#" term="comparacion"/><category scheme="http://www.blogger.com/atom/ns#" term="comparar"/><category scheme="http://www.blogger.com/atom/ns#" term="cumpleaños"/><category scheme="http://www.blogger.com/atom/ns#" term="diferencia"/><category scheme="http://www.blogger.com/atom/ns#" term="fecha"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Diferencia entre 2 fechas (años cumplidos) en java</title><content type='html'>Obtener los años cumplidos, a partir de una fecha en particular, tiene sus aplicaciones (validar mayoria de edad en las personas, verificar si aun aplica una garantia, a partir de la fecha de compra, etc)&lt;br /&gt;
&lt;br /&gt;
La aproximacion, es la siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
body.hl { background-color:#eeeeee; }
pre.hl { color:#000000; background-color:#eeeeee; font-size:10pt; font-family:&#39;MS Shell Dlg 2&#39;;}
.hl.num { color:#800080; font-weight:bold; }
.hl.esc { color:#ff00ff; font-weight:bold; }
.hl.str { color:#a68500; }
.hl.pps { color:#0000ff; }
.hl.slc { color:#f27900; }
.hl.com { color:#ff8000; }
.hl.ppc { color:#0080c0; font-weight:bold; }
.hl.opt { color:#ff0080; font-weight:bold; }
.hl.lin { color:#303030; }
.hl.kwa { color:#bb7977; font-weight:bold; }
.hl.kwb { color:#8080c0; font-weight:bold; }
.hl.kwc { color:#0080c0; }
.hl.kwd { color:#004466; }
//--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;pre class=&quot;hl&quot;&gt;&lt;span class=&quot;hl lin&quot;&gt; 1 &lt;/span&gt;&lt;span class=&quot;hl kwa&quot;&gt;import&lt;/span&gt; java&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;util&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;Calendar&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 2 &lt;/span&gt;&lt;span class=&quot;hl kwa&quot;&gt;import&lt;/span&gt; java&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;util&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;Date&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 3 &lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 4 &lt;/span&gt;&lt;span class=&quot;hl kwa&quot;&gt;public class&lt;/span&gt; DatesDiff &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 5 &lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 6 &lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;public static&lt;/span&gt; &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hl kwd&quot;&gt;calculateAge&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Date bornDate&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 7 &lt;/span&gt;  Calendar cal &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; Calendar&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;getInstance&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;hl slc&quot;&gt;// current date&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 8 &lt;/span&gt;  &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; currYear &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; cal&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Calendar&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;YEAR&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt; 9 &lt;/span&gt;  &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; currMonth &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; cal&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Calendar&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;MONTH&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;10 &lt;/span&gt;  &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; currDay &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; cal&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Calendar&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;DAY_OF_MONTH&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;11 &lt;/span&gt;  cal&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;setTime&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;bornDate&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;hl slc&quot;&gt;// now born date&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;12 &lt;/span&gt;  &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; years &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; currYear &lt;span class=&quot;hl opt&quot;&gt;-&lt;/span&gt; cal&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Calendar&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;YEAR&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;13 &lt;/span&gt;  &lt;span class=&quot;hl kwb&quot;&gt;int&lt;/span&gt; bornMonth &lt;span class=&quot;hl opt&quot;&gt;=&lt;/span&gt; cal&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Calendar&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;MONTH&lt;span class=&quot;hl opt&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;14 &lt;/span&gt;  &lt;span class=&quot;hl kwa&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;bornMonth &lt;span class=&quot;hl opt&quot;&gt;==&lt;/span&gt; currMonth&lt;span class=&quot;hl opt&quot;&gt;) {&lt;/span&gt; &lt;span class=&quot;hl slc&quot;&gt;// same month&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;15 &lt;/span&gt;   &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; cal&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl kwd&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;(&lt;/span&gt;Calendar&lt;span class=&quot;hl opt&quot;&gt;.&lt;/span&gt;DAY_OF_MONTH&lt;span class=&quot;hl opt&quot;&gt;) &amp;lt;=&lt;/span&gt; currDay ? years
&lt;span class=&quot;hl lin&quot;&gt;16 &lt;/span&gt;     &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; years &lt;span class=&quot;hl opt&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;17 &lt;/span&gt;  &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;hl kwa&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;18 &lt;/span&gt;   &lt;span class=&quot;hl kwa&quot;&gt;return&lt;/span&gt; bornMonth &lt;span class=&quot;hl opt&quot;&gt;&amp;lt;&lt;/span&gt; currMonth ? years &lt;span class=&quot;hl opt&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl num&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;:&lt;/span&gt; years&lt;span class=&quot;hl opt&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;19 &lt;/span&gt;  &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;20 &lt;/span&gt; &lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;21 &lt;/span&gt;
&lt;span class=&quot;hl lin&quot;&gt;22 &lt;/span&gt;&lt;span class=&quot;hl opt&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Explicación:&lt;br /&gt;
07-07: Se obtiene la fecha actual, al obtener una instancia del objeto Calendar&lt;br /&gt;
08-10: Se obtienen lo valores del año, mes y dia actual (cache)&lt;br /&gt;
11-11: Se actualiza el objeto cal, con la fecha de nacimiento&lt;br /&gt;
12-12: Se calcula la diferencia de años&lt;br /&gt;
13-13: Se obtiene el año de nacimiento (cache) &lt;br /&gt;
14-14: Se verifica si el mes actual coincide con el mes de nacimiento&lt;br /&gt;
15-15:&amp;nbsp; Si los meses coinciden, se valida si el los dias coinciden, de ser este el caso, se regresan la diferencia de años, en caso contrario (aun no se cumple otro año) se regresa la diferencia menos uno.&lt;br /&gt;
18-18: Si los&amp;nbsp;meses no coinciden, se regresala diferencia de los años menos 1 si el mes de nacimiento es menor que el mes actual y la diferencia de años, en caso contrario&lt;br /&gt;
&lt;br /&gt;
En este codigo, se utiliza un solo objeto &lt;a href=&quot;http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html&quot;&gt;Calendar&lt;/a&gt; en vez de 2 objetos distintos. En vez de utilizar un objeto Calendar nuevo, obtenemos los valores que se emplearan a posteriormente en variables de tipo nativo, las cuales radican en el pila (&lt;a href=&quot;http://en.wikipedia.org/wiki/Stack-based_memory_allocation&quot;&gt;stack&lt;/a&gt;), en vez de el&amp;nbsp; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamic_memory_allocation&quot;&gt;heap&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Una optimizacion posible, es parametrizar la fecha actual, para el tema de internacionalizacion, con respecto a las zonas horarias, ya que se da la posibilidad que tomando en cuenta la fecha de la zona horaria de un pais distnto puede ser que se cumpla o no un año mas.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/502227478149194313/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2011/04/diferencia-entre-2-fechas-anos.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/502227478149194313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/502227478149194313'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2011/04/diferencia-entre-2-fechas-anos.html' title='Diferencia entre 2 fechas (años cumplidos) en java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-2914725409180426451</id><published>2010-07-01T23:55:00.000-05:00</published><updated>2010-07-01T23:55:47.279-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="equals"/><category scheme="http://www.blogger.com/atom/ns#" term="GetHashCode"/><category scheme="http://www.blogger.com/atom/ns#" term="hashCode"/><category scheme="http://www.blogger.com/atom/ns#" term="hashmap"/><category scheme="http://www.blogger.com/atom/ns#" term="hashtable"/><category scheme="http://www.blogger.com/atom/ns#" term="hastable"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>tablas de hash y su relacion con las funciones GetHashCode y Equals de C# y hashCode y equals de Java</title><content type='html'>La mayoria de los lenguajes de programacion implementan tablas de hash en alguna de sus variantes (&lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html&quot;&gt;Hashtable&lt;/a&gt;, &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/util/HashMap.html&quot;&gt;HashMap&lt;/a&gt; en Java o &lt;a href=&quot;http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBIQFjAA&amp;amp;url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.collections.hashtable.aspx&amp;amp;ei=1tENTLv9MZHEM7vgxdAM&amp;amp;usg=AFQjCNFQScah-RTMHQXGPAl9z9L83Lw_mw&amp;amp;sig2=1MjJ-UZzdD5wGOxLik_tjw&quot;&gt;Hastable&lt;/a&gt; en C#). Un problema asociado a esta funcionalidad, es la correcta implementacion de las funciones para generar el codigo el codigo de hash de la llave, que sirve para obtener el valor asociado a la misma dentro de la tabla de hash.&lt;br /&gt;
&lt;br /&gt;
Como se vio en el post &lt;a href=&quot;http://geekrazzek.blogspot.com/2010/05/hashcode-y-equals-funcion-en-java-o.html&quot;&gt;hashCode y equals funcion en Java o GetHashCode y Equals en C#&lt;/a&gt;, una tabla de hash, se puede comparar con un &lt;a href=&quot;http://es.wikipedia.org/wiki/Diccionario&quot;&gt;diccionario&lt;/a&gt;. Dado que la funcion que obtiene el codigo hash de un objeto (&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx&quot;&gt;GetHashCode&lt;/a&gt;  para C# y &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/Object.html#hashCode%28%29&quot;&gt;hashCode&lt;/a&gt;  para Java) puede obtener el valor entre -2&lt;sup&gt;31&lt;/sup&gt; y +2&lt;sup&gt;31&lt;/sup&gt; y si el codigo de hash, es unico, entonces, este codigo puede fungir como una &quot;llave&quot; adicional, sobre todo, si se define correctamente y se implementa una funcion que genere este codigo lo mas rapido posible.&lt;br /&gt;
&lt;br /&gt;
Los tiempos de respuesta y uso de memoria de una tabla de hash, dependen de como se implemente, asi como de una correcta definicion de la funcion que genere el codigo de hash. El secreto del desempeño de la tabla de hash, esta el uso de la &lt;a href=&quot;http://es.wikipedia.org/wiki/Aritm%C3%A9tica_modular&quot;&gt;aritmetica  modular&lt;/a&gt;, utilizada para determinar que codigos de hash son similares.&lt;br /&gt;
&lt;br /&gt;
Tanto en Java, como en C# el codigo de hash, esta representado por un numero entero de 32 bits (4 bytes), esto da la posibilidad de tener 2&lt;sup&gt;32&lt;/sup&gt; (poco mas de 4 mil millones o &lt;a href=&quot;http://es.wikipedia.org/wiki/Millardo&quot;&gt;millardos&lt;/a&gt;) posibles codigos de hash distintos. Como se vio en &lt;a href=&quot;http://geekrazzek.blogspot.com/2010/05/hashcode-y-equals-funcion-en-java-o.html&quot;&gt;otro post&lt;/a&gt;, el codigo de hash, se emplea para &quot;indexar&quot; la informacion y realizar una busqueda ejecutando el menor numero de comparaciones posibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para ver como funciona comparemos ahora la tabla de hash con un hospital, el cual tiene un archivo, donde por cuestiones de orden, se colocan los expedientes en cajones. Existen 27 cajones (utilizaremos el alfabeto ingles, el cual no tiene ñ, ch, ni acentos, dieresis u otras letras, simbolos, acentos, etc) cada cajon almacena los expedientes correspondientes a la letra inicial del nombre de la persona.&lt;br /&gt;
&lt;br /&gt;
Suponiendo que el hospital es nuevo (new Hospital()), los 27 cajones estan vacios. cuando llega el primer paciente, se le genera un nuevo expediente y cuando se da de alta, se almacena su expediente en el archivo, si el paciente se llama Ricardo, el cajon que tiene una letra R al frente tendra un unico expediente y los otros 26 expedientes, seguiran vacios.&lt;br /&gt;
&lt;br /&gt;
Si llega un nuevo paciente, llamado Juan, lo ideal, es que se busque si no tiene un expediente, entonces, buscando en el cajon donde se almacenan los expedientes que inician con J, nos damos cuenta de que no tiene expediente y creamos uno nuevo, para posteriormente almacenarlo. &lt;br /&gt;
&lt;br /&gt;
Pero, este hospital es un poco desordenado al momento de almacenar los archivos, pues cuando llega otra persona con cuyo nombre es Ramon, el nuevo expediente, simplemente se pone encima del anterior y cuando llega Rosa, ocurre lo mismo, es decir, dentro del cada cajon, los expedientes, no se ordenan. Esto provoca que cuando llega una persona llamada Romario, se deba buscar el nombre en 3 expedientes distintos, puesto que al no estar ordenados alfabeticamente, hay que &lt;b&gt;comparar&lt;/b&gt; el nombre para verificar que no es el expediente buscado. Por lo que es ligeramente mas tardado el proceso de busqueda del expediente de una persona cuyo nombre inicia con R que si inicia con J o si inicia con cualquier otra letra del abecedario. Ya se atendio Romario y se le genero un expediente. Extrañamente, viene una persona que se llama Ruperto (si, ya se, muchas R), esto provoca que el cajon donde estan estos expedientes, comienze a desbordarse y la busqueda cada vez tarde mas.&lt;br /&gt;
&lt;br /&gt;
Esto que estoy describiendo, ocurre, cuando la funcion que genera el codigo de hash (la letra inicial del nombre, en este caso) esta incorrectamente definida y todos o la mayoria de los elementos que estamos almacenando tengan el mismo codigo de hash.&lt;br /&gt;
&lt;br /&gt;
Para evitar esta situacion, se suelen definir funciones, en ocasiones extrañamente complejas, imaginemos por un momento, que cambiase las reglas para almacenar la informacion, ahora tendre las mismas 27 cajas, pero para determinar el cajon donde se almacenara el expediente, se sumara el valor ASCII de cada letra del nombre de la persona, el resultado se multiplicara por 13 (un numero primo por cierto) y se realizara la operacion modulo 27, al resultado de este, se le sumara 1, el resultado de esto, se convertira a una letra, 1 por A, 2 por B&amp;nbsp; ... y 27 por Z ... Despues de realizar todas estas operaciones , no duden que probablemente haya uno y solo un expediente por cajon,&amp;nbsp; pero ahora la generacion del codigo de hash se volvio costosa en tiempo.&lt;br /&gt;
&lt;br /&gt;
Ahora, que ocurre cuando se agregan mas letras al abecedario, por ejemplo acentos y dieresis, asi como la letra ñ, pero sin agregar cajones a nuestro sistema de almacenamiento. La solucion es buscar similitudes o equivalencias, por ejemplo n es parecida a la letra ñ y las letras acentuadas o con dieresis a las mismas sin el acento o la dieresis. Esto es buscar similitudes o equivalencias. Para realizar estas operaciones de &quot;equivalencias&quot; las tablas de hash, utilizan &lt;a href=&quot;http://es.wikipedia.org/wiki/Aritm%C3%A9tica_modular&quot;&gt;aritmetica   modular&lt;/a&gt;, es decir, dado que el universo para la generacion del codigo de hash, es basto, se emplea este tipo de aritmetica, para determinar que codigos de hash son similares y almacenarlos conjuntamente.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/2914725409180426451/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/07/tablas-de-hash-y-su-relacion-con-las.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/2914725409180426451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/2914725409180426451'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/07/tablas-de-hash-y-su-relacion-con-las.html' title='tablas de hash y su relacion con las funciones GetHashCode y Equals de C# y hashCode y equals de Java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-4550314638645269707</id><published>2010-06-03T16:13:00.000-05:00</published><updated>2010-06-03T16:13:14.856-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="cadena"/><category scheme="http://www.blogger.com/atom/ns#" term="concat"/><category scheme="http://www.blogger.com/atom/ns#" term="concatenacion"/><category scheme="http://www.blogger.com/atom/ns#" term="constantes"/><category scheme="http://www.blogger.com/atom/ns#" term="operadores"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><title type='text'>operador +, cadenas, cadenas constante y el compilador en C#</title><content type='html'>Al igual que en java, el compilador de C# es capaz de realizar optimizaciones al momento de compilar el codigo y convertir una instruccion en otra, utilizando las funciones definidas en la clase &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.string.aspx&quot;&gt;String&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Como se vio en el post dedicado a &lt;a href=&quot;http://geekrazzek.blogspot.com/2010/05/operador-y-el-compilador.html&quot;&gt;java&lt;/a&gt;, es posible utilizar el compilador a nuestro favor, cuando se conoce como funciona.&lt;br /&gt;
En el siguiente ejemplo, se muestra una concatenacion, utilizando el operador +.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Collections&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Generic&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Linq&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Text&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;namespace&lt;/span&gt;&lt;/b&gt; ClassLibrary1
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;     &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;Class1&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Test&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; b &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; b&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;             Console&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;WriteLine&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;18:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;19:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Al decompilar el codigo, empleando el comando ildasm, se obtiene el siguiente codigo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;.method private hidebysig instance void  Test() cil managed
   {
     // Code size       29 (0x1d)
     .maxstack  2
     .locals init ([0] string a,
              [1] string b,
              [2] string x)
     IL_0000:  nop
     IL_0001:  ldstr      &quot;cadena1&quot;
     IL_0006:  stloc.0
     IL_0007:  ldstr      &quot;cadena2&quot;
     IL_000c:  stloc.1
     IL_000d:  ldloc.0
     IL_000e:  ldloc.1
     IL_000f:  call       string [mscorlib]System.String::Concat(string,
                                                              string)
     IL_0014:  stloc.2
     IL_0015:  ldloc.2
     IL_0016:  call       void [mscorlib]System.Console::WriteLine(string)
     IL_001b:  nop
     IL_001c:  ret
   } // end of method Class1::Test
&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
El codigo que genera codigo similar es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;/tt&gt;&lt;tt&gt;&lt;b&gt;&lt;tt&gt;&lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt;&lt;/tt&gt;&lt;/b&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style=&quot;color: teal;&quot;&gt;&lt;/span&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Collections&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Generic&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Linq&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Text&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;namespace&lt;/span&gt;&lt;/b&gt; ClassLibrary1
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;     &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;Class2&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Test&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; String&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Concat&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;             Console&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;WriteLine&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Como es posible observar, el codigo generado ejecuta una funcion propia de la clase &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.string.aspx&quot;&gt;String&lt;/a&gt;, la cual sabe concatenar cadenas, generando una nueva cadena del tamaño necesario. Sin embargo, este comportamiento solo se presenta cuando se emplean 2, 3 y hasta 4 cadenas, ya cuando se trata de 5 o mas cadenas, primero construye un arreglo de cadenas, con las cadenas a concatenar y posteriormente emplea el metodo &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/0wkb0y3w%28v=VS.100%29.aspx&quot;&gt;Concat(String[])&lt;/a&gt;. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;﻿&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Collections&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Generic&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Linq&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Text&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;namespace&lt;/span&gt;&lt;/b&gt; ClassLibrary1
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;     &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;Class3&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Test&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; b &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena3&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; d &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena4&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; e &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena5&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; b &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; d &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; e&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;18:&lt;/span&gt;             Console&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;WriteLine&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;19:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;20:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;21:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;22:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Produciendo el siguiente codigo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;.method private hidebysig instance void  Test() cil managed
  {
    // Code size       84 (0x54)
    .maxstack  3
    .locals init ([0] string a,
             [1] string b,
             [2] string c,
             [3] string d,
             [4] string e,
             [5] string x,
             [6] string[] CS$0$0000)
    IL_0000:  nop
    IL_0001:  ldstr      &quot;cadena1&quot;
    IL_0006:  stloc.0
    IL_0007:  ldstr      &quot;cadena2&quot;
    IL_000c:  stloc.1
    IL_000d:  ldstr      &quot;cadena3&quot;
    IL_0012:  stloc.2
    IL_0013:  ldstr      &quot;cadena4&quot;
    IL_0018:  stloc.3
    IL_0019:  ldstr      &quot;cadena5&quot;
    IL_001e:  stloc.s    e
    IL_0020:  ldc.i4.5
    IL_0021:  newarr     [mscorlib]System.String
    IL_0026:  stloc.s    CS$0$0000
    IL_0028:  ldloc.s    CS$0$0000
    IL_002a:  ldc.i4.0
    IL_002b:  ldloc.0
    IL_002c:  stelem.ref
    IL_002d:  ldloc.s    CS$0$0000
    IL_002f:  ldc.i4.1
    IL_0030:  ldloc.1
    IL_0031:  stelem.ref
    IL_0032:  ldloc.s    CS$0$0000
    IL_0034:  ldc.i4.2
    IL_0035:  ldloc.2
    IL_0036:  stelem.ref
    IL_0037:  ldloc.s    CS$0$0000
    IL_0039:  ldc.i4.3
    IL_003a:  ldloc.3
    IL_003b:  stelem.ref
    IL_003c:  ldloc.s    CS$0$0000
    IL_003e:  ldc.i4.4
    IL_003f:  ldloc.s    e
    IL_0041:  stelem.ref
    IL_0042:  ldloc.s    CS$0$0000
    IL_0044:  call       string [mscorlib]System.String::Concat(string[])
    IL_0049:  stloc.s    x
    IL_004b:  ldloc.s    x
    IL_004d:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_0052:  nop
    IL_0053:  ret
  } // end of method Class3::Test
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
En cambio, el compilador de C# al igua que el de java, es capaz de detectar cadenas constantes &quot;inline&quot; y generar una cadena con el resultado en tiempo de compilacion, evitando el procesamiento en tiempo de ejecucion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;﻿&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Collections&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Generic&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Linq&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Text&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;namespace&lt;/span&gt;&lt;/b&gt; ClassLibrary1
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;     &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;Class4&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Test&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;             &lt;span style=&quot;color: #009900;&quot;&gt;string&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;             Console&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;WriteLine&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Generando el siguiente codigo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;.method private hidebysig instance void  Test() cil managed
{
  // Code size       15 (0xf)
  .maxstack  1
  .locals init ([0] string x)
  IL_0000:  nop
  IL_0001:  ldstr      &quot;cadena1cadena2&quot;
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000d:  nop
  IL_000e:  ret
} // end of method Class4::Test
&lt;/pre&gt;&lt;br /&gt;
El compilador puede ayudar en el desempeño del sistema, al generar algunas de estas operaciones previamente.&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/4550314638645269707/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/06/operador-cadenas-cadenas-constante-y-el.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/4550314638645269707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/4550314638645269707'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/06/operador-cadenas-cadenas-constante-y-el.html' title='operador +, cadenas, cadenas constante y el compilador en C#'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-7392328251310719554</id><published>2010-06-02T00:05:00.003-05:00</published><updated>2010-06-02T23:51:14.831-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cadena"/><category scheme="http://www.blogger.com/atom/ns#" term="char"/><category scheme="http://www.blogger.com/atom/ns#" term="concat"/><category scheme="http://www.blogger.com/atom/ns#" term="concatenacion"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><title type='text'>cadenas en java (strings)</title><content type='html'>En java, como en muchos lenguajes de programacion modernos, existe una clase que define la representacion interna de una cadena durante la ejecucion del programa. En java esta clase es &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/String.html&quot;&gt;String&lt;/a&gt;. Internamente, la clase &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/String.html&quot;&gt;String&lt;/a&gt;, esta representada por un arreglo del tipo nativo char. Derivado de esto, la maquina virtual de java, maneja las cadenas como un conjunto de caracteres codificados en Unicode en formato UTF-16 (No UTF-8, no ASCII). Una consecuencia es que cada caracter que conforma la cadena, utiliza 2 bytes.&lt;br /&gt;
&lt;br /&gt;
Una situacion que se da debido a la restriccion de inmutabilidad, es que los constructores que reciben un arreglo de caracteres (char[]) deben generar un arreglo interno nuevo y copiar el original (total o parcialmente, segun sea el caso), dependiendo del constructor que se emplee.&lt;br /&gt;
&lt;br /&gt;
En cambio, cuando se genera una cadena utilizando otra cadena como base, es posible compartir el arreglo internamente, pues la fuente inmutable por definicion. En algunas situaciones, se puede generar un nuevo arreglo interno, para evitar el uso de memoria.&lt;br /&gt;
&lt;br /&gt;
Cuando se necesita extraer un caracter de una cadena, es preferible utilizar la funcion &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/String.html#charAt%28int%29&quot;&gt;charAt&lt;/a&gt;, en vez de un substring. Dado que esta funcion regresa un valor directamente (el iesimo caracter en el arreglo) sin necesidad de crear objetos y utilizando exclusivamente el stack, en cambio substring crea un nuevo objeto String, que puede compartir la memoria empleada por la cadena original. Una prueba de esto, es ejecutar el siguiente codigo:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String s = &quot;test&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; long start = System.currentTimeMillis();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; Integer.MAX_VALUE; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; s.substring(0,1);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(System.currentTimeMillis() - start);&lt;br /&gt;
&lt;br /&gt;
Contra este codigo&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String s = &quot;test&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; long start = System.currentTimeMillis();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; Integer.MAX_VALUE; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; s.charAt(0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(System.currentTimeMillis() - start);&lt;br /&gt;
&lt;br /&gt;
El primer codigo, puede llegar a ejecutarse en unos cuantos milisegundos (30 aprox en un Centrino Duo a 1.83GHz), mientras que el segundo codigo se tarda mas de 200 veces mas tiempo (casi 1 minuto en el mismo procesador), particularmente, cuando se ejecuta la maquina virtual con la opcion -server, cuando se ejecuta con la opcion -client, los tiempos de ejecucion del primer ejemplo es de 1/3 con respecto al segundo ejemplo. Este codigo optimizado esta empleado en el post &quot;&lt;a href=&quot;http://geekrazzek.blogspot.com/2010/05/extraccion-del-nombre-de-una-propiedad.html&quot;&gt;Extraccion del nombre de una propiedad del getter respectivo en java&lt;/a&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
La funcion &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/String.html#concat%28java.lang.String%29&quot;&gt;concat&lt;/a&gt;, es optima cuando se emplea exclusivamene con 2 cadenas, pues se aloja exactamente la memoria necesaria para construir la nueva cadena, cuya longitud es la suma de ambas longitudes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/7392328251310719554/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/06/cadenas-en-java-strings.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/7392328251310719554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/7392328251310719554'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/06/cadenas-en-java-strings.html' title='cadenas en java (strings)'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-6173018141574074505</id><published>2010-05-28T01:15:00.000-05:00</published><updated>2010-05-28T01:15:57.733-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="double"/><category scheme="http://www.blogger.com/atom/ns#" term="entero"/><category scheme="http://www.blogger.com/atom/ns#" term="float"/><category scheme="http://www.blogger.com/atom/ns#" term="flotante"/><category scheme="http://www.blogger.com/atom/ns#" term="int"/><category scheme="http://www.blogger.com/atom/ns#" term="integer"/><category scheme="http://www.blogger.com/atom/ns#" term="number"/><category scheme="http://www.blogger.com/atom/ns#" term="operadores"/><category scheme="http://www.blogger.com/atom/ns#" term="punto flotante"/><title type='text'>numeros constantes y el operador + en java</title><content type='html'>Al igual que ocurre con las cadenas, el compilador, puede realizar calculos y utilizar el resultado, reemplazando una complicada operacion y minimizando el trabajo en tiempo de ejecucion. Esto resultando en menor uso de memoria y procesador. El ejemplo acontinuacion:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;NumberConstantTest&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;// number or hours&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;60&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;// mins per hour&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                 &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt; &lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;// milliseconds per second&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;float&lt;/span&gt; b &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;5f &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;2f&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; 2f&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;double&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;1d &lt;span style=&quot;color: #990000;&quot;&gt;/&lt;/span&gt; 3d&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Explicacion&lt;br /&gt;
05-07: Un ejemplo de como definir el numero de segundos en una hora (60000), teniendo la posibilidad de definir el numero de horas, cuando sea necesario.&lt;br /&gt;
08-08: Realizando una operacion con punto flotante.&lt;br /&gt;
09-09: Ejemplo de una combinacion de constantes, con variables.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Compiled from &quot;NumberConstantTest.java&quot;
   public class test.NumberConstantTest extends java.lang.Object{
   public test.NumberConstantTest();
     Code:
      0: aload_0
      1: invokespecial #8; //Method java/lang/Object.&quot;&amp;lt;init&amp;gt;&quot;:()V
      4: return

   public static void main(java.lang.String[]);
     Code:
      0: ldc #16; //int 60000
      2: istore_1
      3: ldc #17; //float 2.35f
      5: fstore_2
      6: iload_1
      7: i2d
      8: ldc2_w #18; //double 0.3333333333333333d
      11: dmul
      12: dstore_3
      13: getstatic #20; //Field java/lang/System.out:Ljava/io/PrintStream;
      16: iload_1
      17: invokevirtual #26; //Method java/io/PrintStream.println:(I)V
      20: getstatic #20; //Field java/lang/System.out:Ljava/io/PrintStream;
      23: fload_2
      24: invokevirtual #32; //Method java/io/PrintStream.println:(F)V
      27: getstatic #20; //Field java/lang/System.out:Ljava/io/PrintStream;
      30: dload_3
      31: invokevirtual #35; //Method java/io/PrintStream.println:(D)V
      34: return
   }&lt;/pre&gt;&lt;br /&gt;
Explicacion &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;En codigo resultante, despues de ejecutar la decompilacion, utilizando el comando &quot;javap -c&quot; se puede apreciar que el compilador calculo los valores y coloco los resultados donde aplica, sin embargo, cuando se trata de combinaciones de constantes, con variables (incluso siendo constantes), no se optimizas y se realiza la operacion.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/6173018141574074505/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/numeros-constantes-y-el-operador-en.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/6173018141574074505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/6173018141574074505'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/numeros-constantes-y-el-operador-en.html' title='numeros constantes y el operador + en java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-3460553654939810242</id><published>2010-05-26T01:14:00.001-05:00</published><updated>2010-05-26T01:20:54.343-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Array"/><category scheme="http://www.blogger.com/atom/ns#" term="binarySearch"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="comparable"/><category scheme="http://www.blogger.com/atom/ns#" term="equals"/><category scheme="http://www.blogger.com/atom/ns#" term="GetHashCode"/><category scheme="http://www.blogger.com/atom/ns#" term="hashtable"/><category scheme="http://www.blogger.com/atom/ns#" term="IComparable"/><category scheme="http://www.blogger.com/atom/ns#" term="Sort"/><title type='text'>generics en C#, implementando GetHashCode, Equals y Comparable</title><content type='html'>A continuacion, la manera de utilizar generics en C#, para implementar las funciones &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.object.gethashcode%28v=VS.71%29.aspx&quot;&gt;GetHashCode&lt;/a&gt; y &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.object.equals%28VS.71%29.aspx&quot;&gt;Equals&lt;/a&gt;, asi como la implementacion de &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.icomparable%28VS.71%29.aspx&quot;&gt;IComparable&lt;/a&gt;. Este ejemplo es equivalente al ejemplo de java&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;using&lt;/span&gt;&lt;/b&gt; System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Collections&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;Generic&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;namespace&lt;/span&gt;&lt;/b&gt; Test
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;     &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;abstract&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;GenericClass&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;internal&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;T&lt;/span&gt; id&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; T Id
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;             &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;&lt;/b&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;             &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt;                 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; id&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;             &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt;             &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;&lt;/b&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt;             &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;18:&lt;/span&gt;                 id &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;value&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;19:&lt;/span&gt;             &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;20:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;21:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;override&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;GetHashCode&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;22:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;23:&lt;/span&gt;             &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; id&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;GetHashCode&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;24:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;25:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;override&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;bool&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Equals&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;object&lt;/span&gt; obj&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;26:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;27:&lt;/span&gt;             &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;==&lt;/span&gt; obj
&lt;span style=&quot;color: black;&quot;&gt;28:&lt;/span&gt;                 &lt;span style=&quot;color: #990000;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(((&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)(&lt;/span&gt;id &lt;span style=&quot;color: teal;&quot;&gt;as&lt;/span&gt; GenericClass&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;==&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;null&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;29:&lt;/span&gt;                     &lt;span style=&quot;color: #990000;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Equals0&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;((&lt;/span&gt;GenericClass&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;)&lt;/span&gt;obj&lt;span style=&quot;color: #990000;&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;30:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;31:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;bool&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Equals&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;GenericClass&amp;lt;T&amp;gt;&lt;/span&gt; obj&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;32:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;33:&lt;/span&gt;             &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;==&lt;/span&gt; obj &lt;span style=&quot;color: #990000;&quot;&gt;||&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Equals0&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;obj&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;34:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;35:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;bool&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Equals0&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;GenericClass&amp;lt;T&amp;gt;&lt;/span&gt; obj&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;36:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;37:&lt;/span&gt;             &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; id&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;Equals&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;obj&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;id&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;38:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;39:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;40:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;41:&lt;/span&gt;     &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;abstract&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;GenericClassComparable&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;:&lt;/span&gt; GenericClass&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;42:&lt;/span&gt;         IComparable&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;GenericClassComparable&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;where&lt;/span&gt;&lt;/b&gt; T &lt;span style=&quot;color: #990000;&quot;&gt;:&lt;/span&gt; IComparable&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;43:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;44:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;CompareTo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;GenericClassComparable&amp;lt;T&amp;gt;&lt;/span&gt; o&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;45:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;46:&lt;/span&gt;             &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; id&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;CompareTo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;o&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;id&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;47:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;48:&lt;/span&gt;     &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;49:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;50:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Explicacion:&lt;br /&gt;
06-06: Declaracion de utilizacion del uso de generics&lt;br /&gt;
08-08: Declaracion del &lt;i&gt;id&lt;/i&gt;.&lt;br /&gt;
10-20: Declaracion de los accesors para el &lt;i&gt;id&lt;/i&gt;.&lt;br /&gt;
21-24: Definicion de la funcion GetHashCode, empleando las funciones propias del atributo &lt;i&gt;id&lt;/i&gt;.&lt;br /&gt;
25-38: Definicion de multiples funciones Equals.&lt;br /&gt;
41-42: Declaracion del uso de &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.icomparable%28VS.71%29.aspx&quot;&gt;IComparable&lt;/a&gt;&lt;br /&gt;
44-47: Definicion de la funcion &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.icomparable.compareto%28v=VS.71%29.aspx&quot;&gt;CompareTo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Optimizacion:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;El uso de esta clase, permite utilizar automaticamente las funciones &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.array.sort%28v=VS.85%29.aspx&quot;&gt;Sort&lt;/a&gt; y &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.array.binarysearch%28v=VS.85%29.aspx&quot;&gt;BinarySearch&lt;/a&gt;, de la clase &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/czz5hkty%28v=VS.85%29.aspx&quot;&gt;Array&lt;/a&gt;, asi como la clase &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.collections.hashtable%28v=VS.85%29.aspx&quot;&gt;Hashtable&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/3460553654939810242/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/generics-en-c-implementando-gethashcode.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/3460553654939810242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/3460553654939810242'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/generics-en-c-implementando-gethashcode.html' title='generics en C#, implementando GetHashCode, Equals y Comparable'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-449844432816274665</id><published>2010-05-21T01:47:00.004-05:00</published><updated>2011-06-23T14:26:12.547-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="equals"/><category scheme="http://www.blogger.com/atom/ns#" term="GetHashCode"/><category scheme="http://www.blogger.com/atom/ns#" term="hashCode"/><category scheme="http://www.blogger.com/atom/ns#" term="hastable"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="tablas de hash"/><title type='text'>hashCode y equals funcion en Java o GetHashCode y Equals en C#</title><content type='html'>¿Cual es la relacion de las funciones que obtienen el codigo hash de un objeto, la funcion que determina la igualdad entre 2 objetos?&lt;br /&gt;
&lt;br /&gt;
La respuesta, la dan las &lt;a href=&quot;http://es.wikipedia.org/wiki/Tabla_hash&quot;&gt;tablas de hash&lt;/a&gt; o &lt;a href=&quot;http://en.wikipedia.org/wiki/Hash_table&quot;&gt;hashtables&lt;/a&gt; en ingles. Para explicar el funcionamiento de estas empleare una analogia con los diccionarios (los libros). Un diccionario es un conjunto de palabras con su respectivo significado y las tablas de hash, son un conjunto de llaves asociadas con un valor. Comparando el diccionario con la tabla de hash, las llaves son las palabras y los significados, son los valores.&lt;br /&gt;
&lt;br /&gt;
Para explicar el funcionamiento de la tabla de hash en terminos del diccionario, explicare primero la organizacion de este ultimo.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Las palabras estan ordenadas en orden alfabetico estricto&lt;/li&gt;
&lt;li&gt;Las palabras que inician con la misma letra, estan agrupadas bajo esa letra, existiendo un indice de letras (este puede ser un indice o una serie de marcas en la orilla del mismo)&lt;/li&gt;
&lt;/ol&gt;Bajo estas reglas, si yo necesito buscar el significado de la palabra &quot;idioma&quot; primero determino donde estan las palabras que inician con la letra I y posteriormente ubico la palabra dentro de esta seccion. Como nota, si la palabra no esta dentro de esta seccion (palabras que inician con I), no continuo buscando en las palabras que inician con J o H o cualquier otra letra del abecedario (claro, si se como emplear el diccionario).&lt;br /&gt;
&lt;br /&gt;
Comparado con una tabla de hash, el codigo hash se emplea de la misma manera que nosotros empleamos la primer letra de la palabra a buscar en el diccionario, es decir, se emplea, para determinar un rango de busqueda y posteriormente se emplea la funcion que determina igualdad, para determinar la misma. Cabe aclarar que es importante, tanto para la busqueda en el diccionario, como la busqueda en la tabla de hash, que el algoritmo para generar el codigo hash debe ser eficiente (minimizar el tiempo de respuesta), ademas de que dado un valor, siempre debe regresar el mismo codigo.&lt;br /&gt;
&lt;br /&gt;
Con respecto a la funcion equals, se utiliza para saber cual llave del conjunto (o palabra en caso del diccionario) tiene el valor (definicion en el diccionario) que estamos buscando.&lt;br /&gt;
&lt;br /&gt;
Derivado de esto, se observa, que como en la vida real, tanto la funcion para obtener el codigo hash como la funcion para validad la igualdad, deben tener tiempos de respuesta minimos, particularmente la de igualdad, dado que es la que mas se emplea cuando se busca.&lt;br /&gt;
&lt;br /&gt;
Nota: No es mi intencion ahondar en el funcionamiento de las tablas de hash, dado que existen multiples referencias a su funcionamiento en internet e implica conocimiento sobre teoria de colisiones, algunas formulas y conceptos matematicos, estructuras de datos y por supuesto las variantes de cada lenguaje de programacion. En la &lt;a href=&quot;http://es.wikipedia.org/wiki/Tabla_hash&quot;&gt;wikipedia&lt;/a&gt;, asi como en las materias relacionadas con estructuras de datos de muchas carreras relacionadas a sistemas se explica ampliamente su funcionamiento e implementacion.&lt;br /&gt;
&lt;br /&gt;
Si lo muesto en este blog, es precisamente por la importancia que tiene definir correctamente las funciones y que ademas, sean eficazes y eficientes (optimas), pues el uso de tablas de hash esta amplamente extendido.&lt;br /&gt;
&lt;br /&gt;
En java existen 2 clases que se emplean ampliamente &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/util/Hashtable.html&quot;&gt;Hashtable&lt;/a&gt; y &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/util/HashMap.html&quot;&gt;HashMap&lt;/a&gt;. En C# la clase que se emplea normalmente es &lt;a href=&quot;http://msdn.microsoft.com/es-es/library/system.collections.hashtable.aspx&quot;&gt;Hashtable&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Actualmente solo he implementado esta funcionalidad en java, en estas entradas:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://geekrazzek.blogspot.com/2010/05/hashcode-y-equals.html&quot;&gt;implementando  las funciones hashCode y equals en java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://geekrazzek.blogspot.com/2010/05/hashcode-y-equals-con-generics.html&quot;&gt;implementando  las funciones hashCode y equals con generics en java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;Pronto realizare las implementaciones respectivas para C#&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-16300105-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/449844432816274665/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/hashcode-y-equals-funcion-en-java-o.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/449844432816274665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/449844432816274665'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/hashcode-y-equals-funcion-en-java-o.html' title='hashCode y equals funcion en Java o GetHashCode y Equals en C#'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-5527940045424492358</id><published>2010-05-21T00:25:00.001-05:00</published><updated>2010-05-21T00:54:37.568-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="constantes"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="operadores"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><category scheme="http://www.blogger.com/atom/ns#" term="StringBuilder"/><title type='text'>operador +=, cadenas, cadenas constante y el compilador en Java</title><content type='html'>Como se vio en la entrada &lt;a href=&quot;http://geekrazzek.blogspot.com/2010/05/operador-y-el-compilador.html&quot;&gt;anterior&lt;/a&gt;, el utilizar incorrectamente un operador, puede ser optimizado por el compilador o en su defecto, una instruccion (en apariencia) se puede convertir en un conjunto de instrucciones, que impacta negarivamente en el desempeño del sistema.&lt;br /&gt;
&lt;br /&gt;
El operador += es un ejemplo de operador que nunca se debe utilizar, debido a como esta implementado, veamos este codigo.&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-16300105-1&quot;);
pageTracker._trackPageview();
} catch(err) {}
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;1:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;2:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;3:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;4:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;5:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;6:&lt;/span&gt;                 x &lt;span style=&quot;color: #990000;&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;7:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;8:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;9:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Si de compilamos el codigo java resultante (el archivo .class) con el comando &quot;javap -c&quot;, obtenemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Compiled from &quot;StringTest.java&quot;
   public class test.StringTest extends java.lang.Object{
   public test.StringTest();
   Code:
   0: aload_0
   1: invokespecial #8; //Method java/lang/Object.&quot;&amp;lt;init&amp;gt;&quot;:()V
   4: return

   public static void main(java.lang.String[]);
   Code:
   0: ldc #16; //String cadena1
   2: astore_1
   3: new #18; //class java/lang/StringBuilder
   6: dup
   7: aload_1
   8: invokestatic #20; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
   11: invokespecial #26; //Method java/lang/StringBuilder.&quot;&amp;lt;init&amp;gt;&quot;:(Ljava/lang/String;)V
   14: ldc #29; //String cadena2
   16: invokevirtual #31; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   19: invokevirtual #35; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
   22: astore_1
   23: getstatic #39; //Field java/lang/System.out:Ljava/io/PrintStream;
   26: aload_1
   27: invokevirtual #45; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   30: return
   }
&lt;/pre&gt;&lt;br /&gt;
El codigo equivalente, para generar el mismo resultado, pero utilizando explicitamente la clase &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html&quot;&gt;StringBuilder&lt;/a&gt; y la funcion &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/String.html#valueOf%28java.lang.Object%29&quot;&gt;valueOf&lt;/a&gt;, es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;1:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;2:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;3:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest2&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;4:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;5:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;6:&lt;/span&gt;                 x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;StringBuilder&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;valueOf&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;)).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;toString&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;7:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;8:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;9:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Pero que ocurre cuando se mete la operacion += dentro de un loop? Como en el siguiente codigo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest3&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; i &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt; i &lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt; i&lt;span style=&quot;color: #990000;&quot;&gt;++)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                         x &lt;span style=&quot;color: #990000;&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                 &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Al decompilar, se genera el siguiente codigo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Compiled from &quot;StringTest3.java&quot;
   public class test.StringTest3 extends java.lang.Object{
   public test.StringTest3();
  Code:
   0: aload_0
   1: invokespecial #8; //Method java/lang/Object.&quot;&amp;lt;init&amp;gt;&quot;:()V
   4: return

public static void main(java.lang.String[]);
  Code:
   0: ldc #16; //String cadena1
   2: astore_1
   3: iconst_0
   4: istore_2
   5: goto 31
   8: new #18; //class java/lang/StringBuilder
   11: dup
   12: aload_1
   13: invokestatic #20; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
   16: invokespecial #26; //Method java/lang/StringBuilder.&quot;&amp;lt;init&amp;gt;&quot;:(Ljava/lang/String;)V
   19: ldc #29; //String cadena2
   21: invokevirtual #31; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   24: invokevirtual #35; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
   27: astore_1
   28: iinc 2, 1
   31: iload_2
   32: bipush 10
   34: if_icmplt 8
   37: return

}
&lt;/pre&gt;&lt;br /&gt;
Es decir, el codigo equivalente es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest4&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; i &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt; i &lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt; i&lt;span style=&quot;color: #990000;&quot;&gt;++)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                         x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;StringBuilder&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;valueOf&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;)).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;toString&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                 &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Como se puede observar, en cada iteracion, se construye un nuevo objeto &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html&quot;&gt;StringBuilder&lt;/a&gt;, con el resultado de ejecutar la funcion &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/String.html#valueOf%28java.lang.Object%29&quot;&gt;valueOf&lt;/a&gt;, que recibe como parametro la variable x, posterior mente, se agrega la cadena que &quot;cadena2&quot; y finalmente, se convierte en una cadena nueva, la cual se asigna a la variable x.&lt;br /&gt;
&lt;br /&gt;
Derivado de esto es destacable notar que este codigo es ineficiente, en la mayoria de las situaciones, particularmente cuando se emplea dentro de loops.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, cuando se emplea en conjunto con el operador +, puede eficiente, pero solo si se conoce exactamente la cantidad de elemenos implicados en la operacion. Como en el siguiente ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest5&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; y &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;auxiliar&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                 x &lt;span style=&quot;color: #990000;&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; y&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Al de compilar se obtiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Compiled from &quot;StringTest5.java&quot;
   public class test.StringTest5 extends java.lang.Object{
   public test.StringTest5();
   Code:
   0: aload_0
   1: invokespecial #8; //Method java/lang/Object.&quot;&amp;lt;init&amp;gt;&quot;:()V
   4: return

public static void main(java.lang.String[]);
   Code:
   0: ldc #16; //String cadena1
   2: astore_1
   3: ldc #18; //String auxiliar
   5: astore_2
   6: new #20; //class java/lang/StringBuilder
   9: dup
   10: aload_1
   11: invokestatic #22; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
   14: invokespecial #28; //Method java/lang/StringBuilder.&quot;&amp;lt;init&amp;gt;&quot;:(Ljava/lang/String;)V
   17: ldc #31; //String cadena2
   19: invokevirtual #33; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   22: aload_2
   23: invokevirtual #33; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   26: invokevirtual #37; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
   29: astore_1
   30: getstatic #41; //Field java/lang/System.out:Ljava/io/PrintStream;
   33: aload_1
   34: invokevirtual #47; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   37: return
}
&lt;/pre&gt;&lt;br /&gt;
El codigo equivalente, es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest6&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; y &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;auxiliar&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                 x &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;StringBuilder&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;valueOf&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;)).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                                 &lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;toString&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Lo cual es eficiente para en terminos de uso de los objetos creados.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/5527940045424492358/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/operador-cadenas-cadenas-constante-y-el.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/5527940045424492358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/5527940045424492358'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/operador-cadenas-cadenas-constante-y-el.html' title='operador +=, cadenas, cadenas constante y el compilador en Java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-1827260091302668549</id><published>2010-05-18T22:37:00.004-05:00</published><updated>2010-05-19T13:07:08.042-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="constantes"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="operadores"/><category scheme="http://www.blogger.com/atom/ns#" term="String"/><category scheme="http://www.blogger.com/atom/ns#" term="StringBuilder"/><title type='text'>operador +, cadenas, cadenas constante y el compilador en Java</title><content type='html'>&quot;Mucho ayuda el que no estorba&quot; &lt;br /&gt;
&lt;br /&gt;
El uso de cadenas, en un sistema es casi inevitable, pues las personas en general leen y escriben cadenas, independientemente de que estas representen fechas, numeros, palabras, etc.&lt;br /&gt;
&lt;br /&gt;
La generacion de estas cadenas, repercute negativamente en el desempeño de una aplicacion o sistema, sobre todo, cuando se generan y utilizan de manera incorrecta o excesiva.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo es el operador + en el lenguaje de programacion, que cuando es correctamente empleado, puede no ser una carga excesiva, pero cuando se emplea incorrectamete o se mal interpreta su utilizacion, puede provocar que se trabaje de manera excesiva, consumiendo tiempo de procesamiento y memoria indiscriminadamente.&lt;br /&gt;
&lt;br /&gt;
La mayoria de los lenguajes compilados, como Java, particularmente, los que no soportan sobrecarga de operadores por programacion, convierten las instrucciones que tienen el operador + cuando estan operando con cadenas, en objetos y/o funciones. Sin embargo, el compilador, puede tener la capacidad de manipular el codigo resultante, para minimizar el uso de los recursos (memoria y procesador)&lt;br /&gt;
&lt;br /&gt;
En el siguiente codigo, se hace uso del operador +.&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-16300105-1&quot;);
pageTracker._trackPageview();
} catch(err) {}
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; b &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; b&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Posteriormente ejecutamos los siguientes comandos:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp; javac test\StringBuilderTest.java&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp; javap -c -classpath . test.StringTest&lt;/div&gt;&lt;br /&gt;
Obteniendo el siguiente codigo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Compiled from &quot;StringTest.java&quot;
   public class test.StringTest extends java.lang.Object{
   public test.StringTest();
   Code:
   0: aload_0
   1: invokespecial #8; //Method java/lang/Object.&quot;&amp;lt;init&amp;gt;&quot;:()V
   4: return

   public static void main(java.lang.String[]);
   Code:
   0: ldc #16; //String cadena1
   2: astore_1
   3: ldc #18; //String cadena2
   5: astore_2
   6: new #20; //class java/lang/StringBuilder
   9: dup
   10: aload_1
   11: invokestatic #22; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
   14: invokespecial #28; //Method java/lang/StringBuilder.&quot;&amp;lt;init&amp;gt;&quot;:(Ljava/lang/String;)V
   17: aload_2
   18: invokevirtual #31; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   21: invokevirtual #35; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
   24: astore_3
   25: getstatic #39; //Field java/lang/System.out:Ljava/io/PrintStream;
   28: aload_3
   29: invokevirtual #45; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   32: return
   }
&lt;/pre&gt;&lt;br /&gt;
Como se puede observar, el compilador, tradujo la sentencia con el operador + en el uso de la funcion &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/String.html#valueOf%28java.lang.Object%29&quot;&gt;valueOf&lt;/a&gt;, la creacion de un objeto &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html&quot;&gt;StringBuilder&lt;/a&gt;, el uso de la funcion &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html#append%28java.lang.String%29&quot;&gt;append&lt;/a&gt; y finalmente &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html#toString%28%29&quot;&gt;toString&lt;/a&gt;, es decir algo como esto:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest2&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; a &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; b &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;StringBuilder&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;valueOf&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #990000;&quot;&gt;)).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #990000;&quot;&gt;).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;toString&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Nosotros conocemos que se estan empleando constantes, por lo que podemos substituir la variable por el valor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;1:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;2:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;3:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest3&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;4:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;5:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1&quot;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;6:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;7:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;8:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;9:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Ejecutamos la compilacion (javac) y de compilacion (javap), obteniendo lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Compiled from &quot;StringTest3.java&quot;
   public class test.StringTest3 extends java.lang.Object{
   public test.StringTest3();
   Code:
   0: aload_0
   1: invokespecial #8; //Method java/lang/Object.&quot;&amp;lt;init&amp;gt;&quot;:()V
   4: return

   public static void main(java.lang.String[]);
   Code:
   0: ldc #16; //String cadena1cadena2
   2: astore_1
   3: getstatic #18; //Field java/lang/System.out:Ljava/io/PrintStream;
   6: aload_1
   7: invokevirtual #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   10: return
   }
&lt;/pre&gt;&lt;br /&gt;
Este es el codigo equivalente, el cual genera el mismo codigo compilado, que el codigo anterior.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;1:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;2:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;3:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;StringTest4&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;4:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;void&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; args&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;5:&lt;/span&gt;                 &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&quot;cadena1cadena2&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;6:&lt;/span&gt;                 System&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;println&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;7:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;8:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;9:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Como se puede notar, cuando se utilizan constantes, el operador + y el compilador, pueden optimizar el codigo, siempre y cuando la constante este &quot;&lt;i&gt;inline&lt;/i&gt;&quot;. De ahi, la frase inicial &quot;mucho ayuda el que no estorba&quot;, en ocasiones hay que dejar que el compilador haga su trabajo.</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/1827260091302668549/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/operador-y-el-compilador.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1827260091302668549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/1827260091302668549'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/operador-y-el-compilador.html' title='operador +, cadenas, cadenas constante y el compilador en Java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-2855488309337106807</id><published>2010-05-14T23:54:00.003-05:00</published><updated>2010-05-15T00:11:02.841-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="binario"/><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="hexadecimal"/><category scheme="http://www.blogger.com/atom/ns#" term="serializacion"/><title type='text'>binario a hexadecimal en C</title><content type='html'>Funcion que genera una cadena hexadecimal en base a una cadena binaria. Esta funcionalidad es util, para tranportar o almacenar informacion binaria y posteriormente recuperarla&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-16300105-1&quot;);
pageTracker._trackPageview();
} catch(err) {}
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;#include&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: red;&quot;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;#include&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: red;&quot;&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;const&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;base&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;0123456789abcdef&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;static&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;const&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; ibase&lt;span style=&quot;color: #990000;&quot;&gt;[]=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt;         &lt;span style=&quot;color: #993399;&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;18:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;19:&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;uchar2hex&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;const&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;in&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: teal;&quot;&gt;size_t&lt;/span&gt; len&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;20:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;21:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;22:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; i&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;23:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; l&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;24:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;25:&lt;/span&gt;         l&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;sizeof&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)*&lt;/span&gt;len&lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;26:&lt;/span&gt;         out&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;malloc&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;27:&lt;/span&gt;         out&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;l&lt;span style=&quot;color: #990000;&quot;&gt;]=&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color: #cc33cc;&quot;&gt;\0&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;28:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;len&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;++)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;29:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;30:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; p&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;31:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; t&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;32:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;33:&lt;/span&gt;                 p&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;34:&lt;/span&gt;                 t&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;in&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;];&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;35:&lt;/span&gt;                 out&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;p&lt;span style=&quot;color: #990000;&quot;&gt;]=&lt;/span&gt;base&lt;span style=&quot;color: #990000;&quot;&gt;[(&lt;/span&gt;t&lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0x0F&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;];&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;36:&lt;/span&gt;                 out&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;p&lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]=&lt;/span&gt;base&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;t&lt;span style=&quot;color: #990000;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0x0F&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;];&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;37:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;38:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; out&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;39:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;40:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;41:&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;hex2uchar&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;hexstr&lt;span style=&quot;color: #990000;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: teal;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;len&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;42:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;43:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;out&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;44:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; i&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;45:&lt;/span&gt;         &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; l&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;46:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;47:&lt;/span&gt;         l&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;strlen&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;hexstr&lt;span style=&quot;color: #990000;&quot;&gt;)/&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;48:&lt;/span&gt;         out&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;malloc&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;sizeof&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)*&lt;/span&gt;l&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;49:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;&lt;/span&gt;l&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;++)&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;50:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;51:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; p&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;52:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;53:&lt;/span&gt;                 p&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;54:&lt;/span&gt;                 out&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #990000;&quot;&gt;]=(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)((&lt;/span&gt;ibase&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;hexstr&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;p&lt;span style=&quot;color: #990000;&quot;&gt;]&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0xEF&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)|(&lt;/span&gt;ibase&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;hexstr&lt;span style=&quot;color: #990000;&quot;&gt;[&lt;/span&gt;p&lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0xEF&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;]&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0xFF&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;55:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;56:&lt;/span&gt;         &lt;span style=&quot;color: #990000;&quot;&gt;*&lt;/span&gt;len&lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt;l&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;57:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; out&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;58:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;59:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Explicacion:&lt;br /&gt;
&lt;br /&gt;
04-04: Caracteres validos en hexadecimal, ordenados convenientemente&lt;br /&gt;
06-17: Arreglo que sirve para invertir el proceso, convirtiendo un caracter hexadeximal en binario&lt;br /&gt;
19-39: Funcion que codifica la informacion binaria en una cadena hexadecimal, la longitud de la informacion binaria, esta indicada por &lt;i&gt;len&lt;/i&gt;.&lt;br /&gt;
41-58: Funcion que extrae la informacion binaria de una cadena hexadecimal, la longitud resultante se almacenara en la direccion de &lt;i&gt;len.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Optimizacion:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Se construye el arreglo resultante con la logitud exacta necesaria&lt;/li&gt;
&lt;li&gt;Se emplean arreglos, para minimizar el numero de operaciones&lt;/li&gt;
&lt;/ul&gt;Notas:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Los valores regresados por estas funciones, se deben liberar con la funcion free, pues se aloja memoria con &lt;i&gt;malloc&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;En esta version, solo es posible usar minusculas&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/2855488309337106807/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/binario-hexadecimal.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/2855488309337106807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/2855488309337106807'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/binario-hexadecimal.html' title='binario a hexadecimal en C'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2663444550290590108.post-5023127560938134239</id><published>2010-05-12T13:21:00.005-05:00</published><updated>2010-05-19T13:06:18.656-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="getter"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="method"/><category scheme="http://www.blogger.com/atom/ns#" term="properties"/><category scheme="http://www.blogger.com/atom/ns#" term="property"/><title type='text'>Extraccion del nombre de una propiedad del getter respectivo en java</title><content type='html'>Extraccion del nombre de una propiedad del getter respectivo&lt;br /&gt;
&lt;br /&gt;
Esta funcionalidad es requerida, para obtener dinamicamente el nombre de la propiedad asociada al methodo getter, sin embargo, puede complicarse, debido a que el estandard puede aceptar el prefijo is o el prefijo get&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#39;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&quot;));
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
try {
var pageTracker = _gat._getTracker(&quot;UA-16300105-1&quot;);
pageTracker._trackPageview();
} catch(err) {}
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span style=&quot;color: black;&quot;&gt;01:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: navy;&quot;&gt;package&lt;/span&gt;&lt;/b&gt; test&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;02:&lt;/span&gt; 
&lt;span style=&quot;color: black;&quot;&gt;03:&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;Test&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;04:&lt;/span&gt;         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;getProperty&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;String&lt;/span&gt; methodName&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;05:&lt;/span&gt;                 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;assert&lt;/span&gt;&lt;/b&gt; methodName&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;startsWith&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;get&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;||&lt;/span&gt; methodName&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;startsWith&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&quot;is&quot;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;06:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; index &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; methodName&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;charAt&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #993399;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;&#39;i&#39;&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;?&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;// cache&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;07:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt; c &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; Character&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;toLowerCase&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;methodName&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;charAt&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;index&lt;span style=&quot;color: #990000;&quot;&gt;));&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #9a1900;&quot;&gt;// cache&lt;/span&gt;&lt;/i&gt;
&lt;span style=&quot;color: black;&quot;&gt;08:&lt;/span&gt;                 &lt;span style=&quot;color: #009900;&quot;&gt;int&lt;/span&gt; l &lt;span style=&quot;color: #990000;&quot;&gt;=&lt;/span&gt; methodName&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;length&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;09:&lt;/span&gt;                 &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #990000;&quot;&gt;((&lt;/span&gt;index &lt;span style=&quot;color: #990000;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;3&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; l &lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;index &lt;span style=&quot;color: #990000;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #990000;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; l &lt;span style=&quot;color: #990000;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;10:&lt;/span&gt;                         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;StringBuilder&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #990000;&quot;&gt;-&lt;/span&gt;index&lt;span style=&quot;color: #990000;&quot;&gt;).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #990000;&quot;&gt;).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;11:&lt;/span&gt;                                         methodName&lt;span style=&quot;color: #990000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;substring&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;index &lt;span style=&quot;color: #990000;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #993399;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;)).&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;toString&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;12:&lt;/span&gt;                 &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;13:&lt;/span&gt;                         &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;String&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #009900;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;{&lt;/span&gt; c &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;14:&lt;/span&gt;                 &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;15:&lt;/span&gt;         &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;16:&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;17:&lt;/span&gt; &lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;
Explicacion:&lt;br /&gt;
06-06: Determinar donde inicia el nombre de la propiedad.&lt;br /&gt;
07-07: El primer caracter del nombre de la propiedad, lo convertimos a minuscula&lt;br /&gt;
09-14: Determinamos si el nombre de la propiedad, esta formado por 1 o mas letras.&lt;br /&gt;
&lt;br /&gt;
Optimizacion:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Se realiza cache de variables, como el indice, para evitar calcularlo en cada ocasion&lt;/li&gt;
&lt;li&gt;Cuando el nombre de la propiedad esta formado por un solo caracter se construye una cadena formada por ese caracter exclusivamente, en caso contrario, se forma la cadena correspondiente.&lt;/li&gt;
&lt;li&gt;Cuando el nombre de la propiedad esta formado por mas de un caracter, se crea un &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html&quot;&gt;StringBuilder&lt;/a&gt; de longitud exacta.&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://geekrazzek.blogspot.com/feeds/5023127560938134239/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/extraccion-del-nombre-de-una-propiedad.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/5023127560938134239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2663444550290590108/posts/default/5023127560938134239'/><link rel='alternate' type='text/html' href='http://geekrazzek.blogspot.com/2010/05/extraccion-del-nombre-de-una-propiedad.html' title='Extraccion del nombre de una propiedad del getter respectivo en java'/><author><name>razzek</name><uri>http://www.blogger.com/profile/00759845724642287733</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>