💻 Exemplos: Capítulo 04: Operadores Bitwise, Manipulação Avançada de Strings, Imutabilidade, String Pool e StringBuilder
Especialização em Sistemas com Java 21 LTS • Capítulo 04
🎯 Visão Geral dos Exemplos Práticos
Neste laboratório prático, implementaremos exemplos corporativos completos explorando:
- Benchmark de Eficiência de Strings: comparação de latência e alocação entre concatenação
+eStringBuilder. - Sistema de Autorização com Máscaras de Bits (Bitmasks): gerenciamento atômico de privilégios de segurança com operadores binários.
- Higienização e Parsing com Recursos Modernos de Texto: manipulação de Text Blocks e métodos de String do Java 11/17/21.
💻 Exemplo 01 — Análise Comparativa de Desempenho: Concatenação vs StringBuilder
package com.empresa.strings;
/**
* Benchmark empírico comparando alocação e latência entre operador + e StringBuilder.
*/
public class BenchmarkStrings {
private static final int ITERACOES = 20_000;
public static void main(String[] args) {
System.out.println("================================================================================");
System.out.println(" BENCHMARK DE PERFORMANCE: STRING CONCAT (+) vs STRINGBUILDER ");
System.out.println("================================================================================");
System.out.printf("Executando laço com %,d concatenações cumulativas...%n%n", ITERACOES);
// 1. Concatenação com operador + (Gera novos objetos a cada iteração)
long inicioConcat = System.nanoTime();
String resultadoConcat = "";
for (int i = 0; i < ITERACOES; i++) {
resultadoConcat += "A";
}
long fimConcat = System.nanoTime();
double duracaoConcatMs = (fimConcat - inicioConcat) / 1_000_000.0;
// 2. Concatenação com StringBuilder pré-dimensionado
long inicioBuilder = System.nanoTime();
StringBuilder sb = new StringBuilder(ITERACOES);
for (int i = 0; i < ITERACOES; i++) {
sb.append("A");
}
String resultadoBuilder = sb.toString();
long fimBuilder = System.nanoTime();
double duracaoBuilderMs = (fimBuilder - inicioBuilder) / 1_000_000.0;
System.out.printf("1. Concatenação com Operador (+) : %10.2f ms (Gera milhares de objetos na Heap)%n", duracaoConcatMs);
System.out.printf("2. Concatenação com StringBuilder : %10.2f ms (Buffer único redimensionável)%n", duracaoBuilderMs);
System.out.printf("🚀 Fator de Aceleração : %.1fx mais rápido com StringBuilder!%n",
duracaoConcatMs / Math.max(duracaoBuilderMs, 0.001));
System.out.println("--------------------------------------------------------------------------------");
System.out.printf("Consistência de Saída: %b (Comprimento final: %,d caracteres)%n",
resultadoConcat.length() == resultadoBuilder.length(), resultadoBuilder.length());
System.out.println("================================================================================");
}
}
💻 Exemplo 02 — Gestor de Autorização e Privilégios com Operadores Bitwise
package com.empresa.strings;
/**
* Gestor de controle de acesso (RBAC) ultra-rápido utilizando operações em nível de bits.
*/
public class GestorAcessoBitwise {
// Níveis de privilégio mapeados em potências de 2
public static final int PERM_VIEW = 1 << 0; // 0000 0001 (1)
public static final int PERM_EDIT = 1 << 1; // 0000 0010 (2)
public static final int PERM_DELETE = 1 << 2; // 0000 0100 (4)
public static final int PERM_PUBLISH = 1 << 3; // 0000 1000 (8)
public static final int PERM_AUDIT_LOG = 1 << 4; // 0001 0000 (16)
public static boolean temPermissao(int mascaraUsuario, int permissaoRequerida) {
return (mascaraUsuario & permissaoRequerida) == permissaoRequerida;
}
public static int concederPermissao(int mascaraUsuario, int permissao) {
return mascaraUsuario | permissao; // OR bit a bit
}
public static int revogarPermissao(int mascaraUsuario, int permissao) {
return mascaraUsuario & ~permissao; // AND com NOT binário
}
public static int alternarPermissao(int mascaraUsuario, int permissao) {
return mascaraUsuario ^ permissao; // XOR binário
}
public static String descreverPermissoes(int mascara) {
StringBuilder desc = new StringBuilder("[");
if (temPermissao(mascara, PERM_VIEW)) desc.append("VIEW ");
if (temPermissao(mascara, PERM_EDIT)) desc.append("EDIT ");
if (temPermissao(mascara, PERM_DELETE)) desc.append("DELETE ");
if (temPermissao(mascara, PERM_PUBLISH)) desc.append("PUBLISH ");
if (temPermissao(mascara, PERM_AUDIT_LOG)) desc.append("AUDIT ");
return desc.toString().stripTrailing() + "]";
}
public static void main(String[] args) {
System.out.println("================================================================================");
System.out.println(" SISTEMA DE AUTORIZAÇÃO E SEGURANÇA BASEADO EM BITS ");
System.out.println("================================================================================");
int perfilEditor = PERM_VIEW | PERM_EDIT | PERM_PUBLISH;
System.out.printf("Perfil Editor Inicial : %s (Máscara Decimal: %d)%n", descreverPermissoes(perfilEditor), perfilEditor);
System.out.printf(" Pode Visualizar? : %b%n", temPermissao(perfilEditor, PERM_VIEW));
System.out.printf(" Pode Deletar? : %b%n", temPermissao(perfilEditor, PERM_DELETE));
// Revogando permissão de publicação
System.out.println("\n--- Revogando Permissão de PUBLISH ---");
perfilEditor = revogarPermissao(perfilEditor, PERM_PUBLISH);
System.out.printf("Perfil Atualizado : %s%n", descreverPermissoes(perfilEditor));
// Concedendo auditoria
System.out.println("\n--- Concedendo Permissão de AUDIT_LOG ---");
perfilEditor = concederPermissao(perfilEditor, PERM_AUDIT_LOG);
System.out.printf("Perfil com Auditoria : %s%n", descreverPermissoes(perfilEditor));
System.out.println("================================================================================");
}
}
📋 Resultado Esperado no Console
================================================================================
BENCHMARK DE PERFORMANCE: STRING CONCAT (+) vs STRINGBUILDER
================================================================================
Executando laço com 20,000 concatenações cumulativas...
1. Concatenação com Operador (+) : 148.50 ms (Gera milhares de objetos na Heap)
2. Concatenação com StringBuilder : 0.85 ms (Buffer único redimensionável)
🚀 Fator de Aceleração : 174.7x mais rápido com StringBuilder!
--------------------------------------------------------------------------------
Consistência de Saída: true (Comprimento final: 20,000 caracteres)
================================================================================
================================================================================
SISTEMA DE AUTORIZAÇÃO E SEGURANÇA BASEADO EM BITS
================================================================================
Perfil Editor Inicial : [VIEW EDIT PUBLISH] (Máscara Decimal: 11)
Pode Visualizar? : true
Pode Deletar? : false
--- Revogando Permissão de PUBLISH ---
Perfil Atualizado : [VIEW EDIT]
--- Concedendo Permissão de AUDIT_LOG ---
Perfil com Auditoria : [VIEW EDIT AUDIT]
================================================================================